SQL-另一个表中不存在SELECT行

时间:2019-03-26 19:57:31

标签: mysql sql

我试图基于表B选择表A中不存在的行。

与表B不同,表A在titleid的末尾具有“ _00”,并且该列称为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 个答案:

答案 0 :(得分:1)

 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

答案 1 :(得分:1)

如果需要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

答案 2 :(得分:0)

可以这样做

SELECT `t1.titleid`
FROM `tablea t1`

WHERE 
NOT EXISTS (SELECT t2.title FROM `tableb t2` WHERE `t1.titleid = t2.title+ '_00'`)

答案 3 :(得分:0)

select * from A where SUBSTRING(A.title,0, 6) in (select B.title from B )