Другой оператор выбора, если значение равно NULL - PullRequest
2 голосов
/ 03 декабря 2011

Я хочу отправить еще один запрос, если значение данного поля равно NULL, возможно ли это?

Примерно так:

   IF the value is null 
      SELECT * FROM `locations`
   ELSE 
      SELECT * FROM `companies`
   ENDIF

Я хочу использовать выходные данные этого запроса в другом запросе. Так будет и так. Если поле не является нулевым в первой таблице, возьмите его, возьмите другое поле из другой таблицы и, наконец, другой запрос из результата этого if.

Ответы [ 4 ]

4 голосов
/ 03 декабря 2011
 SELECT * FROM `locations` WHERE 1 = (CASE WHEN value IS NULL THEN 1 ELSE 0 END)
 UNION ALL
 SELECT * FROM `companies` WHERE 1 = (CASE WHEN value IS NOT NULL THEN 1 ELSE 0 END)

не проверено, но должно работать.

1 голос
/ 03 декабря 2011

Аналогичен вкладу aleroot, но позволяет избежать (ИМХО) отвратительного случая: (также не проверено)

0 голосов
/ 03 декабря 2011

Если я понимаю, вы хотите получить один или другой запрос с разными определениями таблиц за один вызов, если что-то равно null?я думаю, что это не очень хорошая практика ...

Используя MysqlI и хранимую процедуру, вы можете прочитать последний выполненный выбор, но это странно:

DELIMITER //
CREATE PROCEDURE make_weird_query() BEGIN
   IF something is null THEN
      SELECT * FROM `locations`;
   ELSE 
      SELECT * FROM `companies`;
   ENDIF;
END;//

В PHP:

$query = $mysql->query("CALL make_weird_query()");
while($row = $query->fetch_assoc()){
   // ...
}
0 голосов
/ 03 декабря 2011
SELECT
    CASE WHEN L.value IS NULL THEN C.x ELSE L.x END AS x,
    CASE WHEN L.value IS NULL THEN C.y ELSE L.y END AS y,
    CASE WHEN L.value IS NULL THEN C.z ELSE L.z END AS z,
  ...
FROM
    locations L
    LEFT JOIN companies C
        ON L.LocationID=C.LocationID;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...