SQL选择具有匹配值的行

时间:2012-10-22 16:40:33

标签: php sql select

我正在尝试使用php和sql组合一个SELECT语句,但是我很难选择我想要的项目。

假设我的桌子看起来像这样......


master_record_id     credit_id     credit_value
118                  5             Brian J
119                  5             Brian J
120                  7             Katie W
121                  5             Brian J
121                  7             Katie W
125                  7             Katie W

我正在尝试找到哪个master_record_id同时包含Katie W和Brian J.所以我选择了credit_value = Brian J OR Katie W,这就是结果。

基于这个小选择,我可以看到我想要的答案是121,但我该如何选择呢?我想找到包含Katie W和Brian J的master_record_id ......

有没有办法让我说,“选择包含Katie W和Brian J的master_record_id”?

3 个答案:

答案 0 :(得分:7)

您需要使用自我加入

SELECT a.master_record_id
FROM tablename a JOIN tablename b USING (master_record_id)
WHERE a.credit_value = 'Brian J'
AND b.credit_value = 'Katie W'

答案 1 :(得分:1)

select master_record_id
from your_table
where credit_value in ('Brian J', 'Katie W')
group by master_record_id
having count(distinct credit_value) = 2

您必须将having子句中的值调整为in子句中的值数。

答案 2 :(得分:0)

由于性能的原因,这不是最好的方法,但无论如何它应该起作用:

select master_record_id, credit_id, credit_value
from your_table
where master_record_id in (
     select master_record_id from your_table where credit_value = 'Brian J')
and master_record_id in (
         select master_record_id from your_table where credit_value = 'Katie W')

它将返回所有包含Katie W和Brian J的 master_record_id 记录