[英]SELECT if left join IS AND IS NOT ( MYSQL )?
I got one table "people". 我得到一张桌子“人”。
Another one with "hobbiesConnection", and they are connected as an OneToMany. 另一个带有“ hobbiesConnection”的对象,它们作为一个OneToMany连接。
I would like to build a search, where it is possible to search people which have a hobby and don't have a hobby. 我想建立一个搜索,可以搜索有兴趣但没有兴趣的人。
Something like : 就像是 :
SELECT * FROM people
LEFT JOIN hobbiesConnection ON hobbiesConnection.people_id =
hobbiesConnection.hobby_id
WHERE hobby_id = 4 AND hobby_id != 5
Now I get the person with the hobby 4, but I want to get an empty result, because both conditions have to fit to the person. 现在我得到了爱好4的人,但是我想得到一个空的结果,因为这两个条件都必须适合这个人。
Does anybody have an idea how to accomplish this ? 有谁知道如何做到这一点?
Firstly, your JOIN is not correct. 首先,您的JOIN错误。 The two tables should be linked with a foreign key / common column.
这两个表应与外键/公共列链接。 Try the below query;
请尝试以下查询;
SELECT * FROM people
LEFT JOIN hobbiesConnection
ON hobbiesConnection.people_id = people.people_id
And (hobbiesConnection.hobby_id = 4 AND hobbiesConnection.hobby_id != 5)
use (NOT) EXISTS clause: 使用(NOT)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
)
You can achieve the same using joins 您可以使用联接实现相同的目的
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
have a look at the fiddle: http://sqlfiddle.com/#!9/d9926/4 看看小提琴: http ://sqlfiddle.com/#!9/ d9926/4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.