2014-09-27 6 views
0

Как установить значение по умолчанию с «IN» даного, как это:Установить значение по умолчанию со статусом «IN»?

SELECT username 
FROM user 
WHERE id IN (1,2,3,4) 
ORDER BY FIELD(id,1,2,3,4) 

Если id = 2 не доступна, то вернуть 0 или null, например:

John33 
0 
amanda1 
erik 
+1

SELECT (CASE WHEN имя пользователя NULL THEN 0 end) как имя пользователя FROM – Mihai

+1

@Mihai - или используйте ['IFNULL'] (http://dev.mysql.com/doc/refman/5.0/en/control-flow -f unctions.html # function_ifnull);) – slugonamission

+1

ИЛИ coalesce .... – Mihai

ответ

2

Вы должны сделать это с left join:

SELECT u.username 
FROM (select 1 as id union all select 2 union all select 3 union all select 4 
    ) ids left join 
    user u 
    on u.id = ids.id 
ORDER BY FIELD(id, 1, 2, 3, 4); 

Логика в where не может «добавить» новые строки в результирующий набор.

2

Сравнение возвращает логическое значение (TRUE, FALSE или NULL) для каждой строки, для которой она была оценена.

Таким образом, foo IN (list) не может (сам по себе) «производить» строку, которая недоступна в источнике строки.

(Вы говорите, что id = 2 «не доступен», мы принимаем, что означает, что не существует ни одна строка в user, который удовлетворяет этот предикат.)

Вы можете производить набор результатов, как показано на рисунке, но это не делает требуется сравнение IN.

Вам нужен источник строк, который гарантированно вернет нужные вам значения «id»; встроенный просмотр - удобный способ сделать это.

SELECT u.username 
    FROM (SELECT 1 AS id 
     UNION ALL SELECT 2 
     UNION ALL SELECT 3 
     UNION ALL SELECT 4 
     ) n 
    LEFT 
    JOIN user u 
    ON u.id = n.id 
ORDER BY n.id 

LEFT JOIN указывает внешнюю операцию соединения. То есть, если нет соответствующей строки из таблицы с правой стороны (user), которая соответствует строке из таблицы с левой стороны (n), тогда запрос вернет строку из n вместе с NULL значениями для всех столбцы от user.

Вы можете заменить это значение NULL для имени пользователя, используя выражение в списке SELECT. Проверьте, является ли u.id NULL (что означало бы, что не найдено подходящей строки), и возвратите что-то еще. Например, буква 0.

SELECT IF(u.id IS NULL,'0',u.username) AS username 

Это MySQL определенный синтаксис для ANSI-стандарт эквивалент

SELECT CASE WHEN u.id IS NULL THEN '0' ELSE u.username END AS username 

Если вы хотите заменить все нулевые значения username, а не только NULL значения, полученные при user строка отсутствует:

SELECT IFNULL(u.username,'0') AS username 

 Смежные вопросы

  • Нет связанных вопросов^_^