Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择一个表中不在另一个表中的字段_Mysql - Fatal编程技术网

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

我在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
    (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