【问题标题】:SQLite JOIN WHERE not in multiple tablesSQLite JOIN WHERE 不在多个表中
【发布时间】:2018-12-20 01:30:19
【问题描述】:

我使用 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 库一起应用。

【问题讨论】:

    标签: sql sqlite medoo


    【解决方案1】:

    一个选项是双重反连接:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 2012-06-21
      • 2015-08-15
      • 2020-04-25
      • 2014-05-25
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      相关资源
      最近更新 更多