2013-04-22 65 views
0

下面是給定的表。從具有多行的嵌套查詢中獲取選擇

---------------------------------- 
| area | country | date  | 
---------------------------------- 
| a1  |  c1 | 13-01-2013 | 
---------------------------------- 
| a2  |  c2 | 06-01-2013 | 
---------------------------------- 
| a3  |  c1 | 12-01-2013 | 
---------------------------------- 
| a4  |  c2 | 10-01-2013 | 
---------------------------------- 
| a5  |  c3 | 13-01-2013 | 
---------------------------------- 
| a1  |  c1 | 13-01-2013 | 
---------------------------------- 
| a2  |  c2 | 06-01-2013 | 
---------------------------------- 
| a3  |  c1 | 12-01-2013 | 
---------------------------------- 
| a4  |  c2 | 10-01-2013 | 
---------------------------------- 
| a5  |  c3 | 13-01-2013 | 

我想讓我的查詢做下一步。 「

」在給定日期之間顯示該地區在不止一次出現的國家/地區的名稱。「

我試過下面的查詢,但它給我一個錯誤。 > #1242 - 子查詢返回多個1行

SELECT country 
FROM table 
WHERE area = (
SELECT area 
FROM table 
WHERE dateandtime > ' 13-01-2013' 
AND dateandtime < '20-01-2013' 
GROUP BY area 
HAVING count(DISTINCT date) > 1); 
+0

在您的子查詢中將您的第一個「AND」更改爲WHERE,並查看得到您的位置。 – 2013-04-22 20:14:44

+0

完成。但是,錯誤仍然保持不變。 – tony9099 2013-04-22 20:15:49

+0

這是一個快速回應。你測試過它以確保它不起作用? – 2013-04-22 20:17:22

回答

1

的值比較值的列表,你需要使用IN。我也做了一些修改來修正你的語法。

SELECT country 
FROM table 
WHERE area IN (
SELECT area 
FROM table 
WHERE dateandtime > ' 13-01-2013' 
AND dateandtime < '20-01-2013' 
GROUP BY area, country, `date` 
HAVING count(date) > 1) 
); 

相信查詢也可以簡化爲:

SELECT country 
FROM table 
GROUP BY area, country, `date` 
HAVING count(date) > 1 
AND dateandtime BETWEEN '14-01-2013' AND '19-01-2013' 
); 
0

如果你想有一個國家,不選擇區域:

SELECT DISTINCT country 
FROM (
    SELECT country 
    FROM table 
    WHERE dateandtime > ' 13-01-2013' 
    AND dateandtime < '20-01-2013' 
    GROUP BY area 
    HAVING count(DISTINCT date) > 1 
) areas; 
0

你可以找這個

SELECT country 
    FROM table1 

    WHERE date between ' 13-01-2013' AND '20-01-2013' 

    GROUP BY country 
    HAVING count(date) > 1 ; 

DEMO HERE