1

次のMySQLテーブルを検討してください

|----+--------+----------|
| 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 |  
+----+--------+----------+  

結果=okで参照=47の行を選択したいのは、結果=okの行に参照47が存在しないためです。それに加えて、この行は1回だけ発生する可能性がありますが、この場合は2回(id=6とid=9)発生するため、この行は1回だけにします。実際、私が求めているクエリでは、id = 89の行も、reference = 89、result = koとして表示され、reference = 89、result=okの行は他にありません。事前にどうもありがとうございました!

4

2 に答える 2

1

存在しないサブクエリを使用できます:

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
于 2013-03-20T21:47:26.117 に答える
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
于 2013-03-20T21:45:11.617 に答える