MySQL选择一个表中不在另一个表中的字段
我在MySQL数据库中有两个表:MySQL选择一个表中不在另一个表中的字段,mysql,Mysql,我在MySQL数据库中有两个表: Table 1 : id, galleryname Table 2 : galleryid, <many other fields...> 表2 3, ... 将从表1返回这些行 1, flowers 2, water 4, winter 我不知道该怎么办。我非常擅长MySQL的基础知识,但我怀疑这是一个我无法胜任的加入或联盟 感谢您的帮助。尝试以下方法: SELECT * FROM table1 WHERE id NOT IN (SE
Table 1 : id, galleryname
Table 2 : galleryid, <many other fields...>
表2
3, ...
将从表1返回这些行
1, flowers
2, water
4, winter
我不知道该怎么办。我非常擅长MySQL的基础知识,但我怀疑这是一个我无法胜任的加入或联盟
感谢您的帮助。尝试以下方法:
SELECT * FROM table1
WHERE id NOT IN
(SELECT galleryid FROM table2)
或
Left join带来所有t1记录,然后过滤掉那些t2.galleryid为NULL的记录(t2中没有记录) 有人发布了一个答案(然后删除了),只给了我两个版本中的记录。这里的所有其他人似乎都给出了错误,但使用原始的帖子,我做了一个改变,它成功了 原件:
SELECT * FROM table1 INNER JOIN table2 ON galleries.id = images.galleryid
(这给了我两个版本中的一个)
添加!:
SELECT * FROM table1 INNER JOIN table2 ON galleries.id != images.galleryid
(这给了我所需要的)我很确定你必须在
()
中包装你的子选择,以便你的在语句中工作。@AdamWenger:是的,我确定我必须。。。我简直忘了!谢谢你的建议!!:)非常清晰的查询,对正在发生的事情有非常清晰的评论。对我来说,这是正确的答案,也是解决当前问题的最佳方法,因为在大型表上使用子选择并不是很好的主意,而是使用内部联接!=这是一种非常糟糕的做法。这首先创建两个表的笛卡尔乘积,然后过滤掉匹配的行。随着每个表中的行数的增加,这将变得非常低效。
SELECT id, galleryname
FROM table1 AS t1
LEFT OUTER JOIN table2 AS t2 ON t1.id = t2.galleryid
WHERE t2.galleryid IS NULL
SELECT * FROM table1
LEFT JOIN table2
ON table1.id = table2.galleryid
WHERE table2.galleryid IS NULL
SELECT * FROM table1 INNER JOIN table2 ON galleries.id = images.galleryid
SELECT * FROM table1 INNER JOIN table2 ON galleries.id != images.galleryid