在db MySQL中,我有两个表 xxx1 ,58行, xxx2 ,71行。
这两个表格相似,因为在 xxx1 和 xxx2 的列name
中我可以使用例如:
xxx2 表上的VIETNAM 1/35 KHE SANH GUN POSITION BUNKER(
和
xxx1 表上的VIETNAM 1/35 KHE SANH GUN POSITION BUNKER(I)RESIN MODEL KIT
如果在 xxx1 表上尝试此查询,则输出正确无误:
mysql> SELECT
*
FROM
`xxx1` r
WHERE
r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%';
+----+----------------------------------------------------------+
| id | name |
+----+----------------------------------------------------------+
| 30 | VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE RESIN MODEL KIT |
+----+----------------------------------------------------------+
1 row in set
现在我需要从表中选择不在另一个表中的行,我尝试了这个查询,但输出为空:
mysql> SELECT
l.*
FROM
xxx2 l
WHERE
NOT EXISTS (
SELECT
NULL
FROM
xxx1 r
WHERE
r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'
);
Empty set
有什么问题?
如何解决这个问题?
你能帮助我吗?
提前谢谢。
答案 0 :(得分:1)
由于r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'
将根据问题返回一行,因此xxx2中的所有记录的not exists
子句都将为false,因此会生成一个空结果集。
如果你想知道xxx2中的哪条记录在xxx1中没有相应的记录,其中xxx2内容是xxx1中内容的开头,那么使用带有is null
条件的左连接:
select xxx2.name
from xxx2
left join xxx1 on xxx2.name=left(xxx1.name,char_length(xxx2.name))
where xxx1.name is null
答案 1 :(得分:0)
试试这个
SELECT
l.*
FROM
xxx2 l
WHERE
NOT EXISTS (
SELECT
r.name
FROM
xxx1 r
WHERE
r.name LIKE concat('%',l.name,'%')
);
答案 2 :(得分:0)
SELECT l.*
FROM xxx2 l
UNION
SELECT r.*
FROM xxx1 r where r.name LIKE '%VIETNAM 1/35 KHE SANH ARTILLERY FIREBASE R%'