如何在没有外键关系的情况下比较MySQL中同一数据库中的两个表
我有两个带单词列表的表,在表1中我有两列,即。sno和单词;表2有三列,即:。sno、wordlist1和wordlist2。两个表之间没有外键关系 现在,表1中的单词可以作为完整单词或子字符串出现在表2中的wordlist1或wordlist2中 表1 sno单词如何在没有外键关系的情况下比较MySQL中同一数据库中的两个表,mysql,Mysql,我有两个带单词列表的表,在表1中我有两列,即。sno和单词;表2有三列,即:。sno、wordlist1和wordlist2。两个表之间没有外键关系 现在,表1中的单词可以作为完整单词或子字符串出现在表2中的wordlist1或wordlist2中 表1 sno单词 1彼得 2拉维 3假 4阿尔伯特 5汤姆 6米克 7保罗 8西蒙 表2 sno单词列表1单词列表2 1亚当·富尔顿 2阿贾伊·阿拉维 3西蒙·哈桑 4阿尔伯特·西德尔 5汤米·哈里斯 6彼得·库克 我想要一个表1中的单词列表,表2中
1彼得
2拉维
3假
4阿尔伯特
5汤姆
6米克
7保罗
8西蒙
表2 sno单词列表1单词列表2
1亚当·富尔顿
2阿贾伊·阿拉维
3西蒙·哈桑
4阿尔伯特·西德尔
5汤米·哈里斯
6彼得·库克
我想要一个表1中的单词列表,表2中没有任何形式的单词,即。作为确切的单词或子字符串。外键约束的存在不会改变查询 一个选项是使用反连接模式:
SELECT t1.sno
, t1.words
FROM table1 t1
LEFT
JOIN table2 t2
ON t2.wordlist1 LIKE CONCAT('%',t1.words,'%')
OR t2.wordlist2 LIKE CONCAT('%',t1.words,'%')
WHERE t2.sno IS NULL
另一个选项是对相关子查询使用NOT EXISTS谓词:
SELECT t1.sno
, t1.words
FROM table1 t1
WHERE NOT EXISTS
( SELECT 1
FROM table2 t2
WHERE t2.wordlist1 LIKE CONCAT('%',t1.words,'%')
OR t2.wordlist2 LIKE CONCAT('%',t1.words,'%')
)
我使用下面的查询来获取匹配项,结果很好,但是当我添加一个“不喜欢”来代替“喜欢”时,它返回所有表值
选择不同的t2.*从表1 t1、表2 t2中,其中t2.wordlist1-like-concat('%,(t1.word),'%)或t2.wordlist2-like-concat('%,(t1.word),'%);感谢spencer7593,两个选项都很好;但是你能告诉我为什么“不喜欢”在我的查询中不起作用吗fine@user3578365:使用
t1.words不象CONCAT(“%”,t2.wordlist1“%”)谓词的查询将查找t2中满足条件的单个行。例如,“peter”匹配t2中的一行,但谓词将为t2中的其他五行返回true,因此将返回“peter”的五个副本。