MySql - 当一行与结果匹配时,选择具有相同字段的所有记录

时间:2016-07-18 01:16:31

标签: mysql select

我做了一个小提琴:http://sqlfiddle.com/#!9/b1f15

我有这张桌子

<picture>
  <source srcset="img/news.jpg" media="(min-width: 1429px)">
  <source srcset="img/news_m.jpg" media="(min-width: 960px)">
  <source srcset="img/news.jpg" media="(min-width: 460px)">
  <img srcset="img/news_m.jpg"/>
</picture>

如果一个SID的乘积= 3,我想要的是获得所有SID 我看的结果是:

id |  sid  | product
---------------------
1  |  ABC  |   1
2  |  ABC  |   2
3  |  ABC  |   3
4  |  BCD  |   1
5  |  BCD  |   2
6  |  XYZ  |   2
7  |  XYZ  |   3

我完全卡住了,请帮忙!感谢

5 个答案:

答案 0 :(得分:2)

使用自我加入:

SELECT t1.*
FROM sp_test t1
JOIN sp_test t2
ON t1.sid = t2.sid AND t2.product = '3';

EXISTS

SELECT *
FROM sp_test t1
WHERE EXISTS (
    SELECT  1 FROM sp_test t2 WHERE t1.sid = t2.sid AND t2.product = '3'
);

SQLFiddle Demo

答案 1 :(得分:2)

使用简单的左连接如下:

select sp1.* from sp_test sp1 left join sp_test sp2 on sp1.sid=sp2.sid
where sp2.product=3;

答案 2 :(得分:1)

使用简单的嵌套查询。

SELECT * FROM sp_test
WHERE sid IN (SELECT sid FROM sp_test WHERE product = 3);

答案 3 :(得分:1)

另一种变化:

select 
  id, sid, product
from 
  sp_test x
where 
  exists (
    select 
      1
    from 
      sp_test y
    where 
      y.product = '3' 
      and x.sid = y.sid)

答案 4 :(得分:0)

使用条件聚合:

SELECT t1.id, t1.sid, t1.product
FROM sp_test t1
INNER JOIN
(
    SELECT sid
    FROM sp_test
    GROUP BY sid
    HAVING SUM(CASE WHEN product = 3 THEN 1 ELSE 0 END) > 0
) t2
    ON t1.sid = t2.sid

请按照以下链接查看正在运行的演示:

SQLFiddle