2017-10-13 8 views
0

質問は 'met30を持っていないすべてのプロパティのpidを "高度な" インストールします。あなたの答えにサブクエリを使用してください。私のクエリは少し具体的である必要があります

METERTYPEPROPERTYMETER

これは私がこの私は結果があるという事実は別に、すべて良いです

enter image description here

を得た結果である

SELECT PROPERTYMETER.pid, METERTYPE.description 
FROM PROPERTYMETER , METERTYPE 
WHERE PROPERTYMETER.metertype = METERTYPE.metertype 
    AND description IN (SELECT description FROM METERTYPE WHERE description = 'conventional') 

を思い付いたクエリですpid 9には、従来のメタタイプと先進的なメタタイプの両方があります。 pidが戻されたことを確認するために私のクエリに何を行うことができますか?

+0

コードをイメージではなくプレーンテキストとして送信します。コードの書式設定のヘルプについては、https://stackoverflow.com/help/formattingを参照してください。 – Barmar

+0

'metertype = advanced'を持つすべてのプロパティの' pid'を取得します。その後、 'NOT IN'テストでそれらを除外します。 – Barmar

+0

これは完全に働いたのです、ありがとう! – kr1s

答えて

0

metertype = 'advanced'を持つすべてのプロパティのpidを取得するサブクエリを使用します。次に、NOT INを使用して、最終結果から除外します。

SELECT DISTINCT pid 
FROM propertymeter 
WHERE pid NOT IN (
    SELECT pid 
    FROM propertymeter AS p 
    JOIN metertype AS m ON p.metertype = m.metertype 
    WHERE m.description = 'advanced') 
+0

これも完全に機能しました。複数のサブクエリではなく、結合を使用する理由はありますか?私は、ジョインがより良いパフォーマンスを提供したり、より効率的なものを提供してくれると思っています。 – kr1s

+0

はい、MySQLは常に、どこで(サブクエリ)を最適化するとは限りません。上記のNOT INは、LEFT JOIN/NULLのパターンとして記述することもできます。https://stackoverflow.com/questions/21633115/return-row-only-if-value-doesnt-exist?lq=1を参照してください。 – Barmar

関連する問題