选择值AND不从一列中选择值,并合并结果

时间:2013-08-30 08:00:21

标签: sql

好吧标题很混乱所以让我用一个例子来解释。

我的表:

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似乎不适合这个。

5 个答案:

答案 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。