首页 > 解决方案 > 如何使用 sqlite 连接尚未包含数据的表

问题描述

我正在尝试加入两个表:用户和收藏夹。用户可能还没有收藏夹,当我尝试 INNER JOIN 两者时,我没有找回没有收藏夹的用户。即使第二个表没有该用户的数据,有什么方法可以加入吗?

我使用以下代码创建了用户表:

db.run(`CREATE TABLE Users(
            UserId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            Name TEXT NOT NULL,
            Password TEXT NOT NULL,
            Phone VARCHAR,
            Email TEXT,
            RestaurantId INTEGER,
            FOREIGN KEY(RestaurantId) REFERENCES Restaurants(RestaurantId))`, (err) => {
                if(err) {
                    console.error(err.message);
                } else {
                    //insert some values
                    var insert = 'INSERT INTO Users (Name, Password, Phone, Email, RestaurantId) VALUES (?, ?, ?, ?, ?)';
                    db.run(insert, [
                        'Liam', 
                        'blabla',
                        '+32412345678',
                        'email@email.com',
                        1
                    ]);
                }
            }
        );

和收藏夹表:

db.run(`CREATE TABLE Favourites(
            FavouriteId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
            UserId INTEGER NOT NULL,
            RestaurantId INTEGER NOT NULL,
            FOREIGN KEY(UserId) REFERENCES Users(UserId),
            FOREIGN KEY(RestaurantId) REFERENCES Restaurants(RestaurantId))`, (err) => {
                if(err) {
                    console.error(err.message);
                } else {
                    //insert some values
                    var insert = 'INSERT INTO Favourites (UserId, RestaurantId) VALUES (?, ?)';
                    db.run(insert, [
                        1,
                        1
                    ]);
                }
            }
        );

这些插入后生成的表中存在的数据没有问题。只有当没有收藏夹的新用户被添加到数据库时,才会出现问题。

标签: node.jssqlitejoin

解决方案


您正在寻找 LEFT JOIN。查看文档:https ://www.w3resource.com/sqlite/sqlite-left-join.php 。

LEFT JOIN 返回连接左侧的所有记录,匹配​​的记录来自右侧。


推荐阅读