首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql多重ANDS

Mysql多重ANDS
EN

Stack Overflow用户
提问于 2011-09-17 16:39:14
回答 2查看 83关注 0票数 0

我有三张桌子,personsjobsjobs_persons

一个人可以拥有多个作业。

Person 1是技术支持和经理

Person 2是技术支持

Person 3是经理

工作1技术支持

工作2管理器

我需要找到一个查询,给我目前技术支持和经理的结果

答案只能是第一人

代码语言:javascript
复制
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行

代码语言:javascript
复制
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行.

我目前正在研究Rails。有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-17 16:43:47

您希望使用OR操作符。使用job.id = 1 AND job.id = 2只返回id等于1的元素,同时返回2,没有任何元素可以这样做。您想要在id为1或id为2的地方使用elemets。

为了使它变得更加明显:

代码语言:javascript
复制
SELECT * FROM table WHERE lastname = 'Smith' AND firstname = 'James';

在执行此操作时,您显然不希望每个名为Smith或James的人。;-)

编辑:

误解了这个问题。您需要的是第二个联接,将作业表加入两次,并将它们与不同的作业连接起来。这有点困难,因为您没有显示模式,但这可能会奏效:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2011-09-17 16:48:30

尝试这样做,以便在关联实体表中得到所有得到1和2的工作的人。没必要去找工作。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7456279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档