SQLite JOIN WHERE 不在多个表中
SQLite JOIN WHERE not in multiple tables
我正在使用 sqlite 并具有以下架构和 table 数据
"CREATE TABLE numbers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cli INTEGER UNIQUE
);"
"CREATE TABLE allocated (
did_id INTEGER,
cli INTEGER UNIQUE,
client_id INTEGER
);"
"CREATE TABLE used (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cli INTEGER DEFAULT 0 NOT NULL,
client_id INTEGER,
date DATETIME
);"
示例数据
table `numbers`
id cli
11 444
12 555
13 666
14 777
15 888
16 999
table `allocated`
did_id cli
14 777
12 555
table `used`
id cli
31 111
31 222
32 444
33 999
我想从 numbers
table 获取列数据 "cli" 其中 "cli" 不在 table allocated
或 table used
.
预期结果
numbers
id cli
13 666
15 888
首先,我想知道对此的 sqlite 查询是什么。
如果可能的话,我想将它与 Medoo php 库一起应用。
一个选项是双反加入:
SELECT n.id, n.cli
FROM numbers n
LEFT JOIN allocated a
ON n.cli = a.cli
LEFT JOIN used u
ON n.cli = u.cli
WHERE
a.cli IS NULL AND u.cli IS NULL;
我们也可以在这里使用 EXISTS
:
SELECT n.id, n.cli
FROM numbers n
WHERE
NOT EXISTS (SELECT 1 FROM allocated a WHERE a.cli = n.cli) AND
NOT EXISTS (SELECT 1 FROM used u WHERE u.cli = n.cli);
我正在使用 sqlite 并具有以下架构和 table 数据
"CREATE TABLE numbers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cli INTEGER UNIQUE
);"
"CREATE TABLE allocated (
did_id INTEGER,
cli INTEGER UNIQUE,
client_id INTEGER
);"
"CREATE TABLE used (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cli INTEGER DEFAULT 0 NOT NULL,
client_id INTEGER,
date DATETIME
);"
示例数据
table `numbers`
id cli
11 444
12 555
13 666
14 777
15 888
16 999
table `allocated`
did_id cli
14 777
12 555
table `used`
id cli
31 111
31 222
32 444
33 999
我想从 numbers
table 获取列数据 "cli" 其中 "cli" 不在 table allocated
或 table used
.
预期结果
numbers
id cli
13 666
15 888
首先,我想知道对此的 sqlite 查询是什么。 如果可能的话,我想将它与 Medoo php 库一起应用。
一个选项是双反加入:
SELECT n.id, n.cli
FROM numbers n
LEFT JOIN allocated a
ON n.cli = a.cli
LEFT JOIN used u
ON n.cli = u.cli
WHERE
a.cli IS NULL AND u.cli IS NULL;
我们也可以在这里使用 EXISTS
:
SELECT n.id, n.cli
FROM numbers n
WHERE
NOT EXISTS (SELECT 1 FROM allocated a WHERE a.cli = n.cli) AND
NOT EXISTS (SELECT 1 FROM used u WHERE u.cli = n.cli);