简体   繁体   English

如果左联接为IS AND IS NOT(MYSQL),则为SELECT?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM