sql запрос на получение строки с условиями - PullRequest
0 голосов
/ 09 июля 2020

Я хочу получить строки из таблицы a, в которой столбец unique_key находится в таблице b, в то же время, unique_key не существует в таблице c. Итак, если я напишу таблицу,

table a 
+----+------+-----------+
| id | Name | int_value |
+----+------+-----------+
| a1 | aa   |         1 |
| a2 | bb   |         2 |
| a3 | cc   |         5 |
+----+------+-----------+
table b
+----+------+-----------+
| id | Name |unique_key |
+----+------+-----------+
| a1 | aa   |        u1 |
| a2 | bb   |        u2 |
| a3 | cc   |        u5 |
+----+------+-----------+
table c 
+----+------+-----------+
| id | Name |unique_key |
+----+------+-----------+
| c1 | aa   |        u1 |
| c2 | bb   |        u2 |
| c3 | cc   |        u3 |
+----+------+-----------+

В результате я хочу получить

id name int_value b.unique_key
a3 cc   5         u5            

, потому что u5 не существует в таблице c. Я пробовал эти sqls, но ни один из них не дал мне правильного результата. Что бы вы сделали?

SELECT a.*, b.unique_key
FROM a
LEFT JOIN ( SELECT id FROM b ) b
ON a.id = b.id
LEFT JOIN ( SELECT unique_key FROM c ) c
ON b.unique_key <> c.unique_key;

SELECT a.*, b.unique_key, c.unique_key
FROM a
LEFT JOIN ( SELECT id FROM b ) b
ON a.id = b.id
LEFT JOIN ( SELECT unique_key FROM c ) c
ON b.unique_key = c.unique_key
WHERE c.unique_key IS NULL;

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Вы можете использовать NOT EXISTS следующим образом:

SELECT a.*, b.unique_key
FROM a JOIN  b
ON a.id = b.id
WHERE NOT EXISTS (SELECT 1 FROM c 
                 WHERE b.unique_key = c.unique_key);
1 голос
/ 10 июля 2020

другой способ - использовать НЕ В

SELECT a.id, a.name, a.int_value, b.unique_key
FROM a
JOIN b ON a.id = b.id
WHERE b.unique_key NOT IN (SELECT DISTINCT c.unique_key FROM c)

результат id: a3, name: cc, int_value: 5, unique_key: u5

1 голос
/ 09 июля 2020

Вы можете попробовать следующий способ -

DEMO

SELECT a.*, b.unique_key
FROM a JOIN b 
ON a.id = b.id
LEFT JOIN c 
ON b.unique_key = c.unique_key
where c.unique_key is null

ВЫХОД:

id  Name    int_value   unique_key
a3  cc       5           u5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...