2013-04-22 2 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' в вашем подзапросе и посмотрите, где это вам. –

+0

сделано. однако ошибка все равно остается прежней. – tony9099

+0

Это был быстрый ответ. Вы протестировали его, чтобы убедиться, что он не работает? –

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^