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