Mysql 找到没有关系的多对多
我有一个Mysql 找到没有关系的多对多,mysql,sql,database,many-to-many,Mysql,Sql,Database,Many To Many,我有一个项目表,一个标签表和一个相关表。 我需要找到未标记的物品 通过此(工作)查询,我找到每个项目的标签号: SELECT i.id, i.text, COUNT( ti.item ) AS count FROM items AS i JOIN topic_item AS ti ON ti.item = i.id GROUP BY ti.item 如果尝试使用以下命令修改查询: ti.item != i.id 或者我补充说 WHERE count = 0 但这不是正确的方法。 哪一种方法
项目
表,一个标签
表和一个相关
表。
我需要找到未标记的物品
通过此(工作)查询,我找到每个项目的标签号:
SELECT i.id, i.text, COUNT( ti.item ) AS count
FROM items AS i
JOIN topic_item AS ti ON ti.item = i.id
GROUP BY ti.item
如果尝试使用以下命令修改查询:
ti.item != i.id
或者我补充说
WHERE count = 0
但这不是正确的方法。
哪一种方法是正确的?请尝试下面的
左连接
SELECT i.id, i.text, COUNT( ti.item ) AS count
FROM items AS i
LEFT JOIN topic_item AS ti ON ti.item = i.id
WHERE ti.item is null
GROUP BY ti.item
您可以使用左联接
,并获取没有匹配标记的项目:
SELECT i.id, i.text
FROM items AS i
LEFT JOIN topic_item AS ti ON ti.item = i.id
WHERE ti.item is null
您还可以使用不存在
:
SELECT i.id, i.text
FROM items AS i
WHERE not exists(
select * from topic_item AS ti
where ti.item = i.id
)
结果仅显示第一行。在我的例子中,这没关系。第一个查询的结果只显示第一行,第二行运行得很好。谢谢@WalterVilla:当我测试第一个查询时,我会得到没有主题的所有行: