SQL - ВЫБРАТЬ строки НЕ СУЩЕСТВУЕТ в другой таблице - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь выбрать строки, которых нет в таблице B, на основе таблицы A.

В отличие от таблицы B, таблица A имеет "_00" в концеtitleid, и столбец называется title вместо titleid.

Таблица A :

id | titleid
---+----------
1  | TEST1_00
2  | TEST2_00
3  | TEST3_00
4  | TEST4_00

Таблица B :

id | title
---+-------
1  | TEST1
2  | TEST2

В настоящее время у меня есть:

SELECT `t1.titleid`
FROM `tableb t1`
LEFT JOIN `tablea t2` ON `t2.title + '_00' = t1.titleid`
WHERE `t2.title` IS NULL

Как выбрать значения, которые присутствуют в A, но отсутствуют в B?


желаемый выход

id | title
---+----------
3  | TEST3_00
4  | TEST4_00

Ответы [ 4 ]

1 голос
/ 26 марта 2019

Вам нужно LEFT JOIN tableb вместо, если tablea

SELECT `t1.titleid`
FROM `tablea t1`
LEFT JOIN `tableb t2` ON `t1.titleid = t2.title+ '_00'`
WHERE `t2.title` IS NULL

Это покажет, какие записи в tablea не совпадают в tableb и являются null

1 голос
/ 26 марта 2019
 SELECT t1.titleid
 FROM tablea t1
 LEFT JOIN tableb t2 ON t2.title + '_00' = t1.titleid
 WHERE t2.title IS NULL

Вы хотите получить данные из Table A, сделать left join для Table B и получить данные where TableB.Title is null.

Ваш запрос пытался получить данные where TableA.Title is NULL.

0 голосов
/ 27 марта 2019
select * from A where SUBSTRING(A.title,0, 6) in (select B.title from B )
0 голосов
/ 26 марта 2019

Это можно сделать вот так

SELECT `t1.titleid`
FROM `tablea t1`

WHERE 
NOT EXISTS (SELECT t2.title FROM `tableb t2` WHERE `t1.titleid = t2.title+ '_00'`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...