2013-03-20 59 views
1

請考慮下面的MySQL表Selectig與存在,只有當另一列已得到只是某些值

|----+--------+----------| 
| id | result |reference | 
|----+--------+----------| 
| 1 |ok  |  33 | 
| 2 |ok  |  46 | 
| 3 |ko  |  55 | 
| 4 |ko  |  55 | 
| 5 |ok  |  55 | 
| 6 |ko  |  47 | 
| 7 |ko  |  89 | 
| 8 |ok  |  91 | 
| 9 |ko  |  47 | 
+----+--------+----------+ 

我要選擇,其結果= KO和基準= 47,因爲該行的列值的行參考文獻47不存在於結果=確定的任何行中。除此之外,我只需要一次該行,因爲這種情況會發生兩次(id = 6和id = 9),儘管它可能會發生一次。事實上,在我所要求的查詢中,id = 89的行也應該顯示爲reference = 89,result = ko,並且沒有其他行的reference = 89和result = ok。 非常感謝您提前!

回答

1

你可以使用一個subquery with not exists

SELECT DISTINCT result, reference 
FROM [dbo].[references] as x 
WHERE NOT EXISTS 
(SELECT * FROM [dbo].[references] as y 
WHERE 
y.reference = x.reference 
and 
y.result = 'ok'); 

你也可以使用自左做加盟:

SELECT DISTINCT x.result, x.reference 
FROM [dbo].[references] as x 
LEFT JOIN 
[dbo].[references] as y 
on x.reference = y.reference 
and y.result = 'ok' 
WHERE 
y.reference IS NULL 
+0

Thaks很多,杜加斯!我認爲你以前給我的第一個解決方案是可以的。我的意思是... SELECT DISTINCT estado,referencia FROM envios WHERE NOT EXISTS(SELECT * FROM envios AS tableA2 WHERE envios.estado ='exito')但是現在想象一下,我只有三個列,而不是隻有三個列,我想要全部檢索它們。我怎麼能這樣做。在你剛纔提到的查詢中,你只需要檢索兩列,但我想要全部七列。感謝您花時間幫助我。對此,我真的非常感激! – Rodolfo 2013-03-20 22:13:13

+0

只需將它們添加到第一個選擇。 – dugas 2013-03-20 22:28:14

+0

謝謝duga,它工作完美。我使用第二個選項,結果正是我需要的!再次感謝! – Rodolfo 2013-03-21 11:01:34

0

使用條件,東西的效果:

IF EXISTS (Select TOP 1 * from <thistable> 
WHERE result='OK' AND reference=47) 
SELECT Select TOP 1 * from <thistable> 
WHERE result='OK' AND reference=47 
ELSE 
SELECT Select TOP 1 * from <thistable> 
WHERE result='KO' AND reference=47 
END 
+0

Hi Voices,謝謝你的時間。杜加的第二個選擇恰恰是我所期待的。問候! – Rodolfo 2013-03-21 11:02:36