使用IN()和强制值的SQL查询

使用IN()和强制值的SQL查询,sql,inner-join,Sql,Inner Join,我有一个内部联接查询,它根据联接表中的值获取国家名称: 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()标准的,并且必须包含网络2 显然,我不能只将2添加到IN(),因为我

我有一个内部联接查询,它根据联接表中的值获取国家名称:

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()标准的
,并且必须包含网络2

显然,我不能只将2添加到IN(),因为我需要2是强制性的,至少有一个是其他的

有人能帮忙吗,我觉得这太简单了。

试试这个:

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);

这将确保任何选定的国家/地区必须具有
网络id=2

首先,通过将联接替换为
存在
子查询来删除
不同的
。然后,您可以添加另一个子查询来处理额外的需求:

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
      ) ;
试试这个(双重连接?):

注:显示的
n.country\u id,n2.country\u id
值仅用于检查结果

只需执行以下操作:

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 )
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 )