SQLite ПРИСОЕДИНЯЙТЕСЬ, ГДЕ не в нескольких таблицах - PullRequest
0 голосов
/ 20 декабря 2018

Я использую 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

Я хочу получить данные столбца "cli" из таблицы numbers, где«cli» отсутствует в таблице allocated или в таблице used.

ожидаемый результат

numbers
id cli 
13 666
15 888

Прежде всего мне хотелось бы знать, что будет запрос sqlite для этого.Если возможно, тогда я хотел бы применить его с библиотекой Medoo php.

1 Ответ

0 голосов
/ 20 декабря 2018

Один из вариантов - двойное анти-объединение:

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