Mysql多个ANDS

时间:2011-09-17 16:39:14

标签: mysql ruby-on-rails

我有三个表职位 jobs_persons

一个人可以拥有多个职位。

第1人是技术支持和经理

第2人是技术支持

第3人是经理

工作1 技术支持

工作2 经理

我需要查找查询,向我提供当前为技术支持和经理

的人员的结果

答案只有人1

SELECT persons.*
FROM persons INNER JOIN jobs_persons ON persons.id = jobs_persons.person_id
INNER JOIN jobs ON jobs.id = jobs_persons.job_id
WHERE job.id IN (1,2)

返回3行

SELECT persons.*
FROM persons INNER JOIN jobs_persons ON persons.id = jobs_persons.person_id
INNER JOIN jobs ON jobs.id = jobs_persons.job_id
WHERE job.id = 1 AND job.id = 2

返回0行。

我目前正在开发Ruby on Rails。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您想使用OR运算符。使用job.id = 1 AND job.id = 2只返回id等于1且同时为2的元素。没有元素可以做到这一点。你想要一个id为1或id为2的元素。

使其更加明显:

SELECT * FROM table WHERE lastname = 'Smith' AND firstname = 'James';

执行此操作时,您显然不希望所有被称为史密斯或詹姆斯的人。 ; - )

编辑:

误读了这个问题。你需要的是第二次加入工作表两次加入并加入他们与不同的工作。你没有展示架构有点困难,但这可能有用:

SELECT persons.*
FROM persons
INNER JOIN jobs_persons jp1 ON persons.id = jp1.person_id
INNER JOIN jobs_persons jp2 ON persons.id = jp2.person_id
INNER JOIN jobs j1 ON j1.id = jp1.job_id 
INNER JOIN jobs j2 ON j2.id = jp2.job_id
WHERE j1.id = 1 AND j2.id = 2

答案 1 :(得分:2)

尝试此操作以获取在关联实体表中获得1 AND 2作业的所有人。无需点击工作表。

SELECT p.*
FROM persons p
WHERE id in (
   SELECT person_id FROM jobs_persons 
   WHERE job_id IN (1,2)
   GROUP BY person_id 
   HAVING COUNT(*) = 2
);

根据您最近的评论,您似乎遇到了性能问题。这真的超出了这个问题和答案的范围。

您需要确保您的索引位于相应的列上:

  • jobs_person.job_id
  • persons.id