В MySQL у меня есть таблица, которая выглядит следующим образом:
+----+------+-------+-------+
| id | code | site | value |
+----+------+-------+-------+
| 1 | 1 | NULL | alpha |
| 2 | 2 | NULL | beta |
| 3 | 2 | xyzzy | gamma |
+----+------+-------+-------+
Таблица связывает value
с code
.
Запись может содержать глобальное значение (обозначено site=NULL
) или специализированное значение (обозначено site="something"
).
Я пытаюсь создать один оператор SQL, который,учитывая значение для site
, вернет специализированное значение, если оно существует, или иначе вернет глобальное значение.
В приведенном выше примере, предполагая, что я ищу значения с site="xyzzy"
, я хочу, чтобыSQL-оператор возвращает "alpha"
, если code=1
или "gamma"
, если code=2
.
Это, конечно, легко сделать с помощью двух операторов SQL, но возможно ли это сделать с помощью одногоОператор SQL?
РЕДАКТИРОВАТЬ
Меня попросили уточнить.Поэтому я попробую:
Таблица используется несколькими веб-сайтами.Каждый сайт должен преобразовать код в значение.Для некоторых кодов некоторые сайты могут иметь свои собственные переводы;для других кодов они имеют общий перевод.Когда сайт ищет код в таблице, необходимо вернуть специфичное для сайта значение, если оно существует, в противном случае необходимо вернуть глобальное значение.
Простой способ сделать это:
SELECT value FROM xx WHERE code=2 AND site="xyzzy";
Если этот оператор возвращает значение, используйте его.В противном случае сделайте следующее:
SELECT value FROM xx WHERE code=2 and site IS NULL;
К сожалению, программное обеспечение имеет неприятное требование, что оператор SQL должен храниться в файле конфигурации, который может содержать только один оператор SQL.Поэтому мне интересно, можно ли выразить это как один оператор SQL.