1

私は2つのテーブルを持っています:

全ての国々

╔════╦═════════════╗
║ ID ║   COUNTRY   ║
╠════╬═════════════╣
║  1 ║ USA         ║
║  2 ║ China       ║
║  3 ║ India       ║
║  4 ║ France      ║
║  5 ║ UK          ║
║  6 ║ Australia   ║
║  7 ║ Philippines ║
╚════╩═════════════╝

supported_countries

╔════════════╦═══════════╦═══════════╗
║ COUNTRY_ID ║  COUNTRY  ║ FILTER_ID ║
╠════════════╬═══════════╬═══════════╣
║          1 ║ USA       ║         1 ║
║          2 ║ China     ║         1 ║
║          3 ║ India     ║         1 ║
║          4 ║ France    ║         2 ║
║          1 ║ USA       ║         2 ║
║          6 ║ Australia ║         2 ║
╚════════════╩═══════════╩═══════════╝

クエリ:

SELECT a.* 
FROM all_countries a
LEFT JOIN supported_countries s
  ON a.id = s.country_id
WHERE s.country_id IS NULL;

したがって、上記の例のように、取得する必要があります。

UK
Philippines

正常に動作しますが、国の例をフィルタリングすると、フィルタリング=2を選択した場合はどうなりますか。結果はゼロになります。

SELECT a.* 
FROM all_countries a
LEFT JOIN supported_countries s
  ON a.id = s.country_id
WHERE s.filter = 2 AND s.country_id IS NULL;

filter = 2の場合、この結果を取得したいはずです。

╔════╦═════════════╗
║ ID ║   COUNTRY   ║
╠════╬═════════════╣
║  2 ║ China       ║
║  3 ║ India       ║
║  5 ║ UK          ║
║  7 ║ Philippines ║
╚════╩═════════════╝

私は正しいクエリを実行していますか?

4

1 に答える 1

2

ON句に条件を追加し、

SELECT  a.* 
FROM    all_countries a
        LEFT JOIN supported_countries s
           ON a.id = s.country_id AND 
              s.filter_ID = 2        -- <<=== HERE
WHERE   s.country_id IS NULL;

結果:

╔════╦═════════════╗
║ ID ║   COUNTRY   ║
╠════╬═════════════╣
║  2 ║ China       ║
║  3 ║ India       ║
║  5 ║ UK          ║
║  7 ║ Philippines ║
╚════╩═════════════╝
于 2013-02-27T07:39:21.877 に答える