2013-09-29 3 views
0

У меня есть более подробное описание, но я подумал, что сначала попробую простой.SQL: Basic Query

X Y 
7 F 
7 F 
7 E 
7 F 
8 F 
8 F 

Я хочу сделать что-то другое основано на выяснение того, если для значения (х) Х есть значение F в Y для всех х годов в соответствующей таблице. Это означает, что 7 не разрезает его, а 8 делает. Как это сделать с помощью подзапроса? Использую ли я ВСЕ? Я написал запрос, но он возвращает true, когда есть одно совпадение, а не все.

+0

Простой способ использовать 'GROUP BY' и условие в разделе' HAVING' – peterm

ответ

1

Попробуйте следующий запрос

select distinct X from temp 
except 
select X from temp where Y!='F' -- x,y columns, temp -> table 

--Query select all distinct X which has all Y as F 

Ниже альтернативный запрос на тот же

select distinct X from temp where not exists (select X from temp where Y='E') 
1

Select * from mytable where X not in (Select X from mytable Where Y <> 'F' )

1

Вы можете сделать это без подзапроса, как это в большинстве крупных RDBMSes

SELECT x 
    FROM table1 
GROUP BY x 
HAVING COUNT(*) = SUM(CASE WHEN Y = 'F' THEN 1 ELSE 0 END) 

или

SELECT x 
    FROM table1 
GROUP BY x 
HAVING MAX(CASE WHEN Y <> 'F' THEN 1 ELSE 0 END) = 0 

Выход:

 
| X | 
|---| 
| 8 | 

Вот SQLFiddle демо (MySQL)
Вот SQLFiddle демо (SQL Server)
Вот SQLFiddle демо (Oracle)

+0

@ user963070 Помогло ли это в конце концов? – peterm