选择是否左连接是和不是(MYSQL)?
我有一张桌子“人” 另一个是“hobbiesConnection”,他们是作为一个OneToMany连接的 我想建立一个搜索,在那里可以搜索有爱好和没有爱好的人 比如:选择是否左连接是和不是(MYSQL)?,mysql,select,join,Mysql,Select,Join,我有一张桌子“人” 另一个是“hobbiesConnection”,他们是作为一个OneToMany连接的 我想建立一个搜索,在那里可以搜索有爱好和没有爱好的人 比如: SELECT * FROM people LEFT JOIN hobbiesConnection ON hobbiesConnection.people_id = hobbiesConnection.hobby_id WHERE hobby_id = 4 AND hobby_id != 5 现在我得到了嗜好4的人,但我想得到
SELECT * FROM people
LEFT JOIN hobbiesConnection ON hobbiesConnection.people_id =
hobbiesConnection.hobby_id
WHERE hobby_id = 4 AND hobby_id != 5
现在我得到了嗜好4的人,但我想得到一个空的结果,因为这两个条件都必须适合这个人
有人知道如何做到这一点吗?使用(不)EXISTS子句:
SELECT * FROM people p
WHERE TRUE
AND EXISTS (
SELECT TRUE FROM hobbiesConnection hc
WHERE hc.people_id = p.people_id -- or p.id? you didnt mention
AND hobby_id = 4
)
AND NOT EXISTS (
SELECT TRUE FROM hobbiesConnection hc
WHERE hc.people_id = p.people_id -- or p.id? you didnt mention
AND hobby_id = 5
)
使用联接可以实现同样的效果
SELECT p.*
FROM people p
JOIN hobbiesConnection h4 ON TRUE
AND h4.people_id = p.people_id -- or p.id? you didnt mention
AND h4.hobby_id = 4
LEFT JOIN hobbiesConnection h5 ON TRUE
AND h5.people_id = p.people_id -- or p.id? you didnt mention
AND h5.hobby_id = 5
WHERE h5.id IS NULL -- or whatever column from that table
看看小提琴:首先,你的加入不正确。这两个表应使用外键/公共列链接。尝试下面的查询
SELECT * FROM people
LEFT JOIN hobbiesConnection
ON hobbiesConnection.people_id = people.people_id
And (hobbiesConnection.hobby_id = 4 AND hobbiesConnection.hobby_id != 5)
改变去哪里和。改变或改变。您可能需要括号
,其中
条件仅由hobby\u id
的值4
满足。和hobby\u id!=5
零件冗余;您可以安全地删除它。people\u id=hobby\u id上的连接看起来不正确显示表格结构,显示一些输入数据和预期结果。您编辑了答案-现在是正确的。我仍然认为整个查询是错误的-考虑示例数据在查询中运行:它为PopePyID 1返回一行(它有爱好5,所以它不应该在这里),对于PopePyId=3(它没有爱好4——所以它也不应该在这里)