0

結合されたテーブルの値に応じて国名を取得するINNERJOINクエリがあります。

SELECT DISTINCT countryName, countrySlug
FROM countries AS Country
INNER JOIN countries_networks AS n ON Country.id = n.country_id
AND n.network_id IN ( 6, 7, 8, 9, 14 ) 

ただし、IN()基準selectを満たすものが必要であり、ネットワーク2も含まれている必要があります。

少なくとも1つは必須であるため、2をIN()に追加することはできません。

誰か助けてもらえますか、とてつもなくシンプルな感じがします。

4

4 に答える 4

1

まず、結合をサブクエリDISTINCTに置き換えて、を削除します。EXISTS次に、別のサブクエリを追加して、追加の要件を処理できます。

SELECT countryName, countrySlug
FROM countries AS c
WHERE EXISTS
      ( SELECT *
        FROM countries_networks AS n 
        WHERE c.id = n.country_id
          AND n.network_id IN ( 6, 7, 8, 9, 14 )
      )
  AND EXISTS
      ( SELECT *
        FROM countries_networks AS n 
        WHERE c.id = n.country_id
          AND n.network_id = 2
      ) ;
于 2013-03-15T09:38:18.263 に答える
1

これを試して:

SELECT DISTINCT 
  countryName, 
  countrySlug
FROM countries AS Country
INNER JOIN countries_networks AS n  ON Country.id   = n.country_id
                                   AND n.network_id IN (6, 7, 8, 9, 14) 
WHERE Country.id IN (SELECT id
                     FROM countries_networks 
                     WHERE network_id = 2
                       AND id IS NOT NULL);

これにより、選択した国にが必要になりますnetwork_id = 2

于 2013-03-15T09:33:27.430 に答える
1

これを試してください(二重結合?):

SELECT DISTINCT countryName, countrySlug, n.country_id, n2.country_id
FROM countries AS Country
INNER JOIN countries_networks AS n ON Country.id = n.country_id
AND n.network_id
IN ( 6, 7, 8, 9, 14 )
INNER JOIN countries_networks AS n2 ON Country.id = n2.country_id
AND n2.network_id = 2

注:n.country_id, n2.country_id値は、結果を確認できるようにするためにのみ表示されます

于 2013-03-15T09:42:09.030 に答える
-1

これを行うだけです:

SELECT DISTINCT countryName, countrySlug
FROM countries AS Country
INNER JOIN countries_networks AS n ON Country.id = n.country_id
AND n.network_id=2 And n.network_id IN (2, 6, 7, 8, 9, 14 )
于 2013-03-15T09:46:51.050 に答える