Выберите строки из таблицы, но по возможности получите переопределение - PullRequest
3 голосов
/ 20 июля 2011

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

id    domain        name    value
----------------------------------
1     NULL          a       v1
2     example.com   a       v2
3     example.net   a       v3
4     NULL          b       v4
5     example.net   b       v5
6     example.com   c       v6
7     example.com   d       v7
8     NULL          d       v8

Как мне выполнить запрос, который будет получать следующие результаты для domain = "example.com"?Обратите внимание, что NULL домен предполагается, когда значение не указано для домена.

name    value
--------------
a       v2
b       v4
c       v6
d       v7

И для домена = "example.net":

name    value
--------------
a       v3
b       v5
d       v8

Ответы [ 3 ]

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

Вроде так

(select name, value
from <your_table_name>
where domain = 'example.com')
union
(select name, value
from <your_table_name>
where domain is null
and name not in
    (select name
    from <your_table_name>
    where domain = 'example.com'))
0 голосов
/ 20 июля 2011

Почему бы не использовать простой выбор SELECT name,value FROM table_name WHERE domain="example.net" ORDER BY name?

0 голосов
/ 20 июля 2011

Агрегирование за максимум value:

SELECT name, MAX(value) AS max_value FROM thetable GROUP BY name;
SELECT name, MAX(value) AS max_value FROM thetable WHERE domain = "example.net" GROUP BY name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...