我正在尝试查询共享重复ID(彼此相关)但在辅助列中保留特定模式的行。
想象一下,这是一个网上商店,每个订单都有多个阶段。每个orderid
在表中都有多个条目。
我想排除某些Orderid
,因为它们具有特定的模式。
示例:
Orderid Stage OtherInfo
----------------------------------
1 step 1 random info
1 step 3 random info
1 step 4 random info
3 step 1 random info
3 step 2 random info
5 step 3 random info
4 step 1 random info
4 step 2 random info
4 step 3 random info
现在,我要查询相应的OrderID
符合条件的行-例如:
预期结果为:
Orderid Stage OtherInfo
-----------------------------------
1 step 1 random info
1 step 3 random info
1 step 4 random info
答案 0 :(得分:1)
您可以使用聚合和having
获取订单ID:
select orderid
from t
group by orderid
having sum(case when stage = 'step 1' then 1 else 0 end) > 0 and
sum(case when stage = 'step 3' then 1 else 0 end) > 0 and
sum(case when stage = 'step 2' then 1 else 0 end) = 0;
要获取原始行:
select t.*
from t
where t.orderid in (select orderid
from t
group by orderid
having sum(case when stage = 'step 1' then 1 else 0 end) > 0 and
sum(case when stage = 'step 3' then 1 else 0 end) > 0 and
sum(case when stage = 'step 2' then 1 else 0 end) = 0
);
答案 1 :(得分:1)
使用EXISTS检查条件:
SELECT *
FROM tablename t
WHERE
EXISTS (SELECT 1 FROM tablename WHERE tablename.Orderid = t.Orderid AND tablename.stage = 'step 1')
AND
EXISTS (SELECT 1 FROM tablename WHERE tablename.Orderid = t.Orderid AND tablename.stage = 'step 3')
AND
NOT EXISTS (SELECT 1 FROM tablename WHERE tablename.Orderid = t.Orderid AND tablename.stage = 'step 2');
答案 2 :(得分:1)
您也可以使用
$comments = DB::table('comment')
->join('user', 'comment.user_id', '=', 'user.id')
->select('comment.*', 'user.name')
->where(image_id, $id)
->get();
OR
SELECT *
FROM T TT
WHERE CASE WHEN EXISTS(SELECT 1 FROM T WHERE OrderID = TT.OrderID AND Stage = 'step 1')
THEN
CASE WHEN EXISTS(SELECT 1 FROM T WHERE OrderID = TT.OrderID AND Stage = 'step 3')
THEN
CASE WHEN NOT EXISTS (SELECT 1 FROM T WHERE OrderID = TT.OrderID AND Stage = 'step 2')
THEN 1
END
END
END = 1;