好吧标题很混乱所以让我用一个例子来解释。
我的表:
id ref valid
---------------
1 PRO true
1 OTH true
2 PRO true
2 OTH false
3 PRO true
4 OTH true
这里的主键是id和ref的组合。
我想选择所有具有有效“PRO”引用和另一个有效引用的ID,在这种情况下它只返回“1”。 我不明白我怎么能这样做,IN和SELF JOIN似乎不适合这个。
答案 0 :(得分:3)
这是一种方法,使用EXISTS
:
SELECT id
FROM Table1 a
WHERE ref = 'PRO'
AND EXISTS
(
SELECT 1
FROM Table1 b
WHERE b.id = a.id
AND b.ref <> 'PRO'
AND b.valid = 'true'
)
答案 1 :(得分:0)
使用join
:
SELECT t1.id
FROM Table1 t1 join Table1 t2 on
t1.id = t2.id and t1.ref = 'PRO' and t2.ref <> 'PRO'
and t1.valid= 'true' and t2.valid= 'true'
答案 2 :(得分:0)
SELECT id 从表1 a 内连接(从id中选择id,count(*)count来自table1 group)作为temp on temp.id = a.id and count&gt; 1 其中a.ref ='PRO'
答案 3 :(得分:0)
这是我的解决方案:
SELECT id
FROM val
WHERE valid='true'
GROUP BY id
HAVING
COUNT(DISTINCT ref)>1
AND COUNT(CASE WHEN ref='PRO' THEN ref END)>0
请参阅小提琴here。
答案 4 :(得分:0)
您可以使用内部自联接,嵌套查询和一些分组来解决它:
SELECT A.*
FROM (
SELECT id
FROM test
WHERE (ref = 'PRO') AND (valid = 'true')
) AS A
INNER JOIN (
SELECT id
FROM test
WHERE valid = 'true'
GROUP BY id
HAVING (
count( DISTINCT ref ) >1
)
) AS B
ON A.id = B.id
A子查询使用'PRO'ref,B组查询表,并在表中查询至少有两个ref且有效为true的id。