我做了一个小提琴: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
我完全卡住了,请帮忙!感谢
答案 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'
);
答案 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
请按照以下链接查看正在运行的演示: