Построение оператора SQL Select - PullRequest
0 голосов
/ 30 июля 2011

Учитывая таблицу T с

|rowid| fld1 | fld2|
|1    |  1   | 10  |
|2    |  1   | 20  |
|3    |  2   | 10  |
|4    |  3   | 20  |

, если я хочу получить все значения fld1 с fld2 = 10 И fld2 = 20.

Это будет только fld1 - единственныйсо значениями fld2 10 и 20.

Мой лучший способ использовать подзапрос:

select * from T where fld2 = 10 and rowid in (select rowid from T where fld2 = 20); 

или есть лучший запрос?

Ответы [ 3 ]

4 голосов
/ 30 июля 2011

Вы можете попробовать самостоятельное объединение:

select * 
from T t1 JOIN T t2 on t1.fld1 = t2.fld1
where t1.fld2 = 10 
and t2.fld2 = 20

Я не уверен в относительной производительности этого решения против vs @ nick

2 голосов
/ 30 июля 2011

Надеюсь, я понял ваш вопрос

select * from table where fld1 in (
select fld1 from table
where fld2 in (10,20)
group by fld1
having count(distinct(fld2)) = 2)

Если вам не нужно извлекать все строки

select fld1 from table
where fld2 in (10,20)
group by fld1
having count(distinct(fld2)) = 2

этого запроса достаточно.

0 голосов
/ 30 июля 2011
SELECT * FROM T WHERE fld2 = '10' AND fld='20'

Это действительно так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...