我正在使用sqlite并具有以下架构和表数据
"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
表中获取列数据“ cli”,其中“ cli”不在表allocated
或表used
中。
预期结果
numbers
id cli
13 666
15 888
首先,我想知道什么是sqlite查询。 如果可能的话,我想将它与Medoo php库一起应用。
答案 0 :(得分:0)
一个选择是双重反联接:
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);