Написание лучшего кода SQL, избегая избыточности - PullRequest
1 голос
/ 08 декабря 2011

У меня есть SQL-запрос, как это:

SELECT Code 
FROM xyz 
WHERE xyz.Code  IN  ('20','10') AND price = 
    (select min(price) FROM xyz  WHERE CODE IN  ('20','10'));

Желаемый результат после запроса: 10

Таблица XYZ: -

Цена: 1 2 1

Код: 10 20 30

Есть ли лучший способ написать это заявление SQL? Потому что в моем SQL-выражении "WHERE CODE IN ('20', '10')" повторяется дважды, и я стараюсь не вызывать этот оператор дважды

Ответы [ 2 ]

6 голосов
/ 08 декабря 2011

Если вы хотите получить только одну строку, вы можете использовать ORDER BY и LIMIT:

SELECT Code
FROM xyz
WHERE xyz.Code IN ('20','10')
ORDER BY price
LIMIT 1
0 голосов
/ 08 декабря 2011

Вы можете использовать join для фильтрации вместо where in условия. Это позволило бы объединенной таблице повторно использовать условие из первой таблицы.

select  Code 
from    (
        select  *
        from    xyz
        where   code in ('20','10')
        ) t1 
inner join
        (
        select  code
        ,       min(price) as min_price
        from    xyz
        group by
                code
        ) filter
on      filter.code = t1.code
        and filter.min_price = t1.price
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...