MySQL选择一个表中不在另一个表中的字段

时间:2011-11-16 14:48:49

标签: mysql

MySQL DB中有2个表:

Table 1 : id, galleryname
Table 2 : galleryid, <many other fields...>

使用PHP,我需要根据其ID来选择表1中的所有行,其中id(galleryid)未出现在表2中。

实施例: 表1

1, flowers
2, water
3, mountains
4, winter

表2

3, ...

将从表1中返回这些行

1, flowers
2, water
4, winter

我不确定如何解决这个问题。我非常擅长MySQL的基础知识,但我怀疑这是一个JOIN或UNION,不属于我的联盟。

感谢任何帮助。

4 个答案:

答案 0 :(得分:26)

试试这个:

SELECT * FROM table1
WHERE id NOT IN
    (SELECT galleryid FROM table2)

SELECT * FROM table1
LEFT JOIN table2
    ON table1.id = table2.galleryid
WHERE table2.galleryid IS NULL

答案 1 :(得分:8)

左连接带来所有t1记录,然后过滤掉那些有t2.galleryid NULL(t2中没有记录)的记录

SELECT id, galleryname
FROM table1 AS t1
LEFT OUTER JOIN table2 AS t2 ON t1.id = t2.galleryid
WHERE t2.galleryid IS NULL

答案 2 :(得分:2)

SELECT * FROM table1
LEFT JOIN table2
ON table1.id = table2.galleryid
WHERE table2.galleryid IS NULL

答案 3 :(得分:1)

有人发布了一个答案(然后删除了它),它只给了我两个人的记录。这里的所有其他人似乎都给出了错误,但是使用原始帖子我做了一个更改并且它有效。

原件:

SELECT * FROM table1 INNER JOIN table2 ON galleries.id = images.galleryid

(这给了我两个中的那个)

添加!:

SELECT * FROM table1 INNER JOIN table2 ON galleries.id != images.galleryid

(这给了我所需要的东西)