如何在没有外键关系的情况下比较MySQL中同一数据库中的两个表

如何在没有外键关系的情况下比较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中我有两列,即。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中没有任何形式的单词,即。作为确切的单词或子字符串。

外键约束的存在不会改变查询

一个选项是使用反连接模式:

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”的五个副本。