检查列中是否有多个值

时间:2014-02-10 09:08:45

标签: mysql sql

我有以下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

我只想要拥有所有技能的人(cp_pessoa)(71,695)。

看起来很简单,但我很挣扎。

示例:

如果我使用OR,则返回具有以下技能的下列人员(1,2,71)(没有能力的人695) 如果我使用AND,则不会返回具有以下技能的以下人员(71,695)

1 个答案:

答案 0 :(得分:1)

这是家庭作业吗?如果是这样,这个想法应该足够了:你正在寻找那些关联技能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
);

如果确保cp_habilidade_freelancer中的id_freelancer没有重复技能,您可以将count(distinct id_habilidade)更改为count(*)。

相关问题