2016-04-17 9 views
0

2つのMySQLのテーブルを考える:最善の方法

member: id, status, name, type 
serial: id, serial, description 

私はIDがmember.status =「2」とシリアルを選択したい= IDが指定されている任意のシリアル値。

つまり、IDを指定すると、IDに関連付けられた別のシリアル番号を見つけて、そのシリアル番号を持つすべてのIDを返すことができますが、そのステータスが「2」の場合に限ります。

私はJOINまたはUNIONが必要とは思わない。私はおそらくserial.idを選択したいと思っていますが、serial = ANY(serial.id = "value"のserialを選択してください)ですが、member.status = "2"の必要性を理解できません。

どうすればよいですか?

ありがとうございました。

+0

サンプルデータと望ましい結果は、あなたがしようとしていることを伝えるのに役立ちます。例えば、「id」は何ですか?メンバーかシリアル? –

答えて

0

次のように動作するはずです。サブクエリを使用して、指定されたidに関連付けられているすべてのserial番号を見つけ、サブクエリの結果にあるserialのすべてのidを見つけます。外部クエリに内部結合を入れてstatusidに一致させます。

SELECT m.id 
    FROM member m 
    JOIN serial s 
    ON s.id = m.id 
    WHERE s.serial IN 
    (SELECT serial 
     FROM serial 
     WHERE id = :search_id) ids 
    AND m.status = '2'; 
+0

残念ながら、少なくとも2つあるはずの0レコードが見つかります。 –

+0

サブクエリから何を得るのですか? –

+0

問題が見つかりました。シリアルナンバーがnullの場合があり、偽の一致が発生するケースがありました。今はうまくいく。ありがとうございました!! –