SQL: как вернуть несуществующую строку? - PullRequest
5 голосов
/ 08 мая 2011

Скажите, у меня есть следующая таблица:

=================================================
| color_id | parent_id | language_id | name     |
=================================================
| 1        | 50        | 1           | Black    |
-------------------------------------------------

Тогда скажи, что мне нужен ряд WHERE parent_id = 50 AND language_id = 2. Очевидно, я ничего не получу обратно, основываясь на моем примере таблицы. Тем не менее, мне все еще нужен результат - вероятно, что-то вроде этого:

=================================================
| color_id | parent_id | language_id | name     |
=================================================
| NULL     | 50        | 2           | NULL     |
-------------------------------------------------

Есть ли способ сделать это в SQL?

Ответы [ 3 ]

7 голосов
/ 08 мая 2011

Вы можете сделать запрос на объединение как потенциально допустимой записи, так и вашей по умолчанию, а затем выбрать первую:

SELECT * FROM
(SELECT color_id, parent_id, language_id, name, 1 as order_rank
 FROM some_table
 WHERE parent_id = %parent_id% AND language_id = %language_id%
 UNION
 SELECT NULL, %parent_id%, %language_id%, NULL, 2 as order_rank
)
ORDER BY order_rank
LIMIT 1

(отредактировано со статическим значением для упорядочения, как предложено OMG Ponies)

0 голосов
/ 08 мая 2011

СЛЕДУЕТ работать с левым соединением для первой таблицы с принудительным фиксированным значением.

select 
      YourTable.color_id,
      ForcedSQL1Record.parent_id,
      ForcedSQL1Record.language_id,
      YourTable.name
   from 
      ( select 50 as Parent_ID,
                2 as Language_ID
            from YourTable
            limit 1 ) ForcedSQL1Record
      left join
         YourTable
            on ForcedSQL1Record.Parent_ID = YourTable.Parent_ID
            AND ForcedSQL1Record Language_ID = YourTable.Language_ID
0 голосов
/ 08 мая 2011

попробуйте поработать с оператором LEFT JOIN. Я, вероятно, не делаю это на 100%, но немного проб и ошибок с вашей стороны должно заставить эту работу.

SELECT table1.field1, table1.field2, table2.field3, table2.field4
FROM my_table table1 
LEFT JOIN my_table table2 ON table1.field1=table2.field1 OR table1.field2=table2.field2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...