1

同じsidで異なるcid-data値を持つ複数のレコードを比較した後、テーブルからすべてのsidをフェッチするMySQLwhen-thenステートメントのヘルプを要求します。

flag    sid cid data
----    --- --- ----
1       300 1   john
1       300 2   john_email
1       300 3   77500
1       300 4   ok

1       301 1   jack
1       301 2   john_email
1       301 3   72210
1       301 4   notok

ここでは、各sidについて、(sid=2はdata=john_email)AND(sid=4はdata=ok)であるかどうかを確認する必要があります。両方の条件が満たされた場合にのみ、sidを返します。つまり、出力は「300」のみになります。

case-when-thenを使用して、「data」を「john_email」と比較し、データを「ok」と比較する方法がわかりません...cid値に基づいています。読んでくれてありがとう。

4

3 に答える 3

2

試す

select sid
from your_table
group by sid
where (cid=2 and data='john_email')
or (cid=4 and data='ok')
having sum(cid=2)=1 and sum(data='john_email')=1
and sum(cid=4)=1 and sum(data='ok')=1

SQLFiddleの例

于 2012-10-16T12:05:05.403 に答える
0

テーブルをそれ自体に結合する必要があります。そうすれば、2つの行の状態を1つの行であるかのように確認できます...

SELECT T1.sid
FROM MYTABLE T1
JOIN MYTABLE T2 ON T1.SID=T2.SID AND T1.CID=1 AND T2.CID=4
WHERE T1.DATA='john'
AND T2.DATA='ok'

結合句でCID値を使用したことに注意してください。ただし、異なるデータ行で結合する場合は、CID値を調整する必要があります...

于 2012-10-16T12:04:58.823 に答える
0

できることは、サブクエリを使用して、値が存在するかどうかを確認することです。

SELECT
    *
FROM
    table outertable
WHERE
    ( cid=2 AND data='john_email' )
    AND
    EXISTS ( SELECT sid FROM table WHERE cid = 4 AND data = 'ok' AND sid = outertable.sid )
于 2012-10-16T12:08:57.853 に答える