2013-03-15 71 views
0

我有一个INNER JOIN查询其抓住取决于值的连接表一国名:SQL查询使用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) 

不过,我现在需要select的那些符合IN()标准,并且还必须包含网络2

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

有人可以帮忙,我有一种感觉它的可笑简单。

回答

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值显示只为能检查结果

+1

我打上你的选择之一,因为它似乎是最快的。 – 2013-03-15 10:12:35

+0

谢谢,不客气! – RainHeart257 2013-03-15 10:15:56

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

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

这也将显示只有'network_id = 2'的国家 – 2013-03-15 09:48:00