Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 SQL:选择其关系列为空的行_Mysql_Sql - Fatal编程技术网

Mysql SQL:选择其关系列为空的行

Mysql SQL:选择其关系列为空的行,mysql,sql,Mysql,Sql,假设我有两个名为Post和Tag的表,它们之间有多对多关系 如何选择没有附加标签的帖子 类似于posts.where(post=>post.tags.length==0)尝试: SELECT post.* FROM post LEFT OUTER JOIN tag ON post.<link_field> = tag.<link_field> WHERE tag.<any_field> IS NULL; 选择post.* 从左后外侧连接标

假设我有两个名为PostTag的表,它们之间有多对多关系

如何选择没有附加标签的帖子

类似于
posts.where(post=>post.tags.length==0)

尝试:

SELECT post.* 
   FROM post LEFT OUTER JOIN tag
   ON post.<link_field> = tag.<link_field>
   WHERE tag.<any_field> IS NULL;
选择post.*
从左后外侧连接标记
邮寄标签。
何处标记。为空;
当没有相关的(链接的)标记时,左外部联接将为标记字段生成所有POST和NULL结果。 因此,如果您使用以下选项进行筛选:

WHERE tag.<any_field> IS NULL
WHERE标记。是空的
你将得到没有标签的帖子

这是用PostgreSQL进行测试的,但应该适用于任何合理的数据库系统,因为它是纯SQL标准

希望这有帮助

使用左连接:

SELECT * 
FROM posts
LEFT JOIN tags ON tags.post_id = posts.id
WHERE tags.id IS NULL;
使用不存在:

SELECT *
FROM posts
WHERE NOT EXISTS (
    SELECT id FROM tags WHERE tags.post_id = posts.id
);
不在以下位置使用:

SELECT *
FROM posts
WHERE posts.id NOT IN (
    SELECT DISTINCT post_id FROM tags
);
这两个表没有(或不应该)直接的多对多关系。
为此,必须创建另一个表:

CREATE TABLE posts_tags(
  post_id INT, 
  tag_id INT, 
  PRIMARY KEY (post_id, tag_id),
  FOREIGN KEY(post_id) REFERENCES posts(id),
  FOREIGN KEY(tag_id) REFERENCES tags(id)
)
保存所有相关的帖子和标签。
使用此表,您可以跟踪所有未附加标签的帖子:

SELECT p.*
FROM posts p LEFT JOIN posts_tags pt
ON pt.post_id = p.id
WHERE pt.post_id IS NULL
或不存在具有

SELECT p.*
FROM posts p 
WHERE NOT EXISTS (SELECT 1 FROM posts_tags WHERE post_id = p.id)

有多种方法可以实现这一点。检查
不存在
左联接
内部查询
相关子查询
到目前为止您尝试了什么?您可以在筛选器中使用
不在
中。外部联接未在中实现MySQL@SlavaRozhnevMySql不支持完全外部联接。支持左外部联接。(其中任何不可为null的字段均为null)