Как заменить UNION в SQL-запросе - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть таблица: attb

------------------------------------------------
Id | Name | Code | Attribute | Amount 
------------------------------------------------
1  | AV   | 123  | Alpha     | 233
------------------------------------------------
2  | TV   | 122  | Beta      | 235
------------------------------------------------
3  | TV   | 123  | Gama      | 238
------------------------------------------------
4  | CD   | 122  | Beta      | 239
------------------------------------------------
5  | TP   | 122  | Beta      | 240
------------------------------------------------
6  | RX   | 123  | Alpha     | 241
------------------------------------------------

Я запрашиваю это как:

select id,name, code, attribute, amount
from attb
where code = 123 and attribute='Alpha'
UNION
select id,name, code, attribute, amount
from attb
where code = 122;

Возвращает следующее


Id | Name | Code | Attribute | Amount 
------------------------------------------------
1  | AV   | 123  | Alpha     | 233
------------------------------------------------
2  | TV   | 122  | Beta      | 235
------------------------------------------------
4  | CD   | 122  | Beta      | 239
------------------------------------------------
5  | TP   | 122  | Beta      | 240
------------------------------------------------
6  | RX   | 123  | Alpha     | 241
------------------------------------------------

Есть ли способ объединить два запроса вместо использования оператора UNION? Или какая-нибудь лучшая реализация?

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Довольно легко.Просто используйте or.

select id,name, code, attribute, amount
from attb
where (code = 123 and attribute='Alpha') OR code = 122
0 голосов
/ 14 ноября 2018

Попробуйте это.

select id,name, code, attribute, amount
    from attb
    where ((code = 123 and attribute='Alpha') or (code = 122))
0 голосов
/ 14 ноября 2018

Просто поместите оба предложения where в один запрос:

select id,name, code, attribute, amount
from attb
where (code = 123 and attribute='Alpha') 
   or code = 122;

Выход:

id  name  code  attribute  amount
1   AV    123   Alpha      233 
2   TV    122   Beta       235 
4   CD    122   Beta       239 
5   TP    122   Beta       240 
6   RX    123   Alpha      241 

Демоверсия SQLFiddle

...