我有以下sql:
SELECT DISTINCT cp_pessoa.id, cp_pessoa.nome
FROM cp_pessoa
LEFT JOIN cp_habilidade_freelancer ON (cp_habilidade_freelancer.id_freelancer = cp_pessoa.id)
LEFT JOIN cp_habilidade ON (cp_habilidade.id = cp_habilidade_freelancer.id_habilidade)
WHERE cp_habilidade.id = 71 OR cp_habilidade.id = 695
LIMIT 0, 10
我只想要具备所有技能(71、695)的人(cp_pessoa)。
看起来似乎很简单,但是我很挣扎。
例子:
如果我使用OR,则会返回具有以下技能(1,2,71)的以下人员(无能力695的人员)
如果我使用AND,则不会返回具有以下技能(71、695)的以下人员
最佳答案
这是作业吗?如果是这样,这个主意就足够了:您正在寻找相关技能71和695等于2的人。
如果这不是家庭作业,而是真正的任务,请告诉我,我会给您完整的SQL语句:-)
编辑:直截了当的方法是问一个人是否同时存在两种技能:
select id, nome
from cp_pessoa p
where exists
(
select *
from cp_habilidade_freelancer hf
where hf.id_freelancer = p.id
and hf.id_habilidade = 71
)
and exists
(
select *
from cp_habilidade_freelancer hf
where hf.id_freelancer = p.id
and hf.id_habilidade = 695
);
另一种查询cp_habilidade_freelancer的方法是:
select id, nome
from cp_pessoa p
where id in
(
select id_freelancer
from cp_habilidade_freelancer hf
where id_habilidade in (71, 695)
group by id_freelancer
having count(distinct id_habilidade) = 2
);
您可以将count(distinct id_habilidade)更改为count(*),以确保cp_habilidade_freelancer中没有id_freelancer重复的技能。
关于mysql - 检查一列中是否有多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21672885/