SQLite объединяет с обратным подтекстом - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть две таблицы, A и B:

A.id
A.name

B.id
B.A_id <-- points to A in a many to one relationship
B.tag <-- predefined integer

Мне нужно объединить две таблицы так, чтобы:

SELECT A.name, B.name, B.tag FROM A INNER JOIN B ON A.id = B.a_id 
WHERE (B.tag IN (1,2,3) AND B.tag NOT IN (4,5)

, и полученный результат должен быть таким, чтобы он былвернуть все возвращенные A и B только в 1, 2, 3 и NOT IN 4, 5 .

Если любое из возвращенных объединений A содержит B.тег с исключенным тегом, поэтому мы не должны видеть его возвращаемым, даже если существует соединение A с действительным тегом B.

т.е.

A.name = 'Bob'
A.id = 1


B.id = 1
B.A_id = 1
B.tag = 10


B.id = 2
B.A_id = 1
B.tag = 11


B.id = 3
B.A_id = 1
B.tag = 12

Когда мы выполняемquery:

SELECT A.id, B.id, B.tag FROM A INNER JOIN B ON A.id = B.a_id 
WHERE (B.tag IN (10) AND B.tag NOT IN (11)

Это НЕ вернет ничего, поскольку у нас есть исключение NOT IN (11).Возможно ли это сделать?

1 Ответ

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

Мне трудно понять ваше объяснение.Я думаю, что вы хотите not exists:

SELECT A.name, B.name, B.tag
FROM A INNER JOIN
     B
     ON A.id = B.a_id 
WHERE B.tag IN (1, 2, 3) AND
      NOT EXISTS (SELECT 1
                  FROM B B2 
                  WHERE B2.a_id = A.id AND B2.tag IN (4, 5)
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...