Sql 如果所有值都满足条件,则返回
我试图返回子表中所有符合条件的记录所在的所有行Sql 如果所有值都满足条件,则返回,sql,oracle,Sql,Oracle,我试图返回子表中所有符合条件的记录所在的所有行 T1: 1 2 3 4 5 T2: 我需要识别T1中的所有ID,它们是T2中的水果, T2.价值单位(苹果、葡萄、香蕉、猕猴桃、蜜露、浆果) 期望输出: 1 2 4 我试过这个: select t1.id from t1,t2 where t1.id = t2.id and t2.value in ('Apple','Grapes','Banana','Kiwi','Honeydew','Berries') 但它不会返回我需要的输出,它还
T1:
1
2
3
4
5
T2:
我需要识别T1中的所有ID,它们是T2中的水果,
T2.价值单位(苹果、葡萄、香蕉、猕猴桃、蜜露、浆果)期望输出:
1
2
4
我试过这个:
select t1.id from t1,t2
where t1.id = t2.id
and t2.value in ('Apple','Grapes','Banana','Kiwi','Honeydew','Berries')
但它不会返回我需要的输出,它还会返回#3和5。显然,您要做的是删除包含不是水果的项目的组:
SELECT T1.ID
FROM T1
WHERE T1.ID NOT IN (SELECT T2.T1_ID
FROM T2
WHERE T2.VALUE NOT IN ('Apple','Grapes','Banana','Kiwi','Honeydew','Berries'))
ORDER BY T1.ID
显然,您要做的是删除包含非水果的项目的组:
SELECT T1.ID
FROM T1
WHERE T1.ID NOT IN (SELECT T2.T1_ID
FROM T2
WHERE T2.VALUE NOT IN ('Apple','Grapes','Banana','Kiwi','Honeydew','Berries'))
ORDER BY T1.ID
假设您希望ID在
t2中至少有一行
select t2.id
from t2
group by t2.id
having sum(case when t2.value not in ('Apple', 'Grapes', 'Banana', 'Kiwi', 'Honeydew', 'Berries')
then 1 else 0
end) = 0; -- nothing that isn't fruit
假设您希望ID在t2中至少有一行
select t2.id
from t2
group by t2.id
having sum(case when t2.value not in ('Apple', 'Grapes', 'Banana', 'Kiwi', 'Honeydew', 'Berries')
then 1 else 0
end) = 0; -- nothing that isn't fruit
在这里添加一个可能的答案
在这种情况下,您可以使用EXISTS
SELECT
T1.ID
FROM
T1
WHERE
NOT EXISTS (
SELECT
1
FROM
T2
WHERE
T2.T1_ID = T1.ID
AND T2.VALUE NOT IN (
'Apple',
'Grapes',
'Banana',
'Kiwi',
'Honeydew',
'Berries'
)
)
干杯 在此添加一个可能的答案
在这种情况下,您可以使用EXISTS
SELECT
T1.ID
FROM
T1
WHERE
NOT EXISTS (
SELECT
1
FROM
T2
WHERE
T2.T1_ID = T1.ID
AND T2.VALUE NOT IN (
'Apple',
'Grapes',
'Banana',
'Kiwi',
'Honeydew',
'Berries'
)
)
干杯 你怎么知道哪些值是水果?我会显式搜索这些值。让我把它添加到我的问题中,你的文字列表中有一个大写问题。它看起来应该是(“苹果”、“葡萄”、“香蕉”、“猕猴桃”、“蜜露”、“浆果”)
。更新了问题“如何知道哪些值是水果?”我会显式搜索这些值。让我把它添加到我的问题中,你的文字列表中有一个大写问题。它看起来应该是(“苹果”、“葡萄”、“香蕉”、“猕猴桃”、“蜜露”、“浆果”)
。更新了问题,但这也将消除1、2和4。我恭敬地认为不会。请看DBFIDLE。但这也将消除1、2和4。我恭敬地说,它不会。看小提琴。