[英]How do I select distinct rows where a column may have a number of the same values but all their 2nd columns have the same value?
[英]SQL - Get rows where all columns are in a list that have the same value in another column
我有一个数据库如下:
drinks_id ingredients_master_id
1 2
1 3
1 4
2 2
2 4
3 5
我正在寻找一个查询,我可以在其中给它一个如 2,4 的成分_master_id 的列表,它会返回所有恰好有 2,4 的drinks_id。
所以在这种情况下,如果我给它的 ingredients_master_id 2,4,5 它会返回drinks_id 2 和3。如果我给它5 它会返回drinks_id 3。
这是我到目前为止所拥有的,但它目前没有显示正确的信息。
SELECT DISTINCT drinks.id
FROM drinks
WHERE drinks.id NOT IN
(
SELECT drinks.id
FROM ingredients
JOIN drinks ON ingredients.drinks_id = drinks.id
WHERE ingredients.ingredients_master_id NOT IN
(
2,3,4,5,6
)
);
我正在寻找一个查询,我可以在其中给它一个如 2,4 的成分_master_id 的列表,它会返回所有恰好有 2,4 的drinks_id。
您可以使用group by
并具有:
select drinks_id
from t
group by drinks_id
having sum( ingredients_master_id in (2, 4) ) = 2;
“= 2”是列表的大小,因此您需要针对不同的列表进行调整。
这是使用COUNT
的解决方案示例:
SELECT i.drinks_id
FROM ingredients i
LEFT JOIN ingredients s
ON s.drinks_id = i.drinks_id
AND s.ingredients_master_id = i.ingredients_master_id
AND s.ingredients_master_id IN (2, 4)
GROUP BY i.drinks_id
HAVING COUNT(i.drinks_id) = COUNT(s.drinks_id)
您可能使用not exists
达到预期的结果,如下所示:
Select t.*
From your_table t
Where t.ingredients_master_id in (2,4,5)
And not exists
(Select 1 from your_table tt
Where tt.drinks_id = t.drinks_id
And tt.ingredients_master_id not in (2,4,5))
您可以使用如下:
select drink_id
from (
select drink_id,listagg(ingredients_master_id,',') within group( order by ingredients_master_id) val from <Table> group by drink_id)
where case
when instr('**2,4,5**',val)> 0
Then 'Y'
else 'N'
end = 'Y';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.