Подтвердить что ты не робот

Инструкция MYSQL CASE THEN с несколькими значениями

Я пытаюсь выбрать несколько значений с помощью инструкции CASE. Я заметил, что мы не можем сделать

CASE 
    WHEN wall.type="bk" 
    THEN books.id1,books.id2, // and so on
END as column_1,

Есть ли способ сделать THEN с несколькими столбцами или нам нужно просто написать кучу операторов CASE THEN? что кажется грязным

4b9b3361

Ответ 1

Нет, это всего лишь одно значение. Кроме того, противоречиво использовать "несколько столбцов" и называть эти несколько столбцов как column_1, правильно?:)

Вы можете использовать другой столбец для хранения другого идентификатора (аналогичный случай) и использовать значения NULL для представления значений else, как и сейчас.

Пример:

CASE 
    WHEN wall.type="bk" 
    THEN books.id1
END as column_1,
CASE 
    WHEN wall.type="bk" 
    THEN books.id2
END as column_2

Дополнительную информацию можно найти в официальной документации .

Ответ 2

Нет. CASE оператор может возвращать только одно значение, поэтому единственный способ добиться того, что вы хотите, дублирует случай...

Сервер базы данных должен быть оптимизирован и выполнять только один раз проверку того же условия...

Ответ 3

И все может быть сделано, но это всегда зависит от того, что вы хотите сделать. Ниже я покажу вам рабочий пример сразу после того, как вы должны взять данные в виде массива и сделать то, что хотите.

CREATE TABLE wall (`ident` int,`type` varchar(2), `order` int);
INSERT INTO wall (`ident`, `type`, `order`) VALUES
    (40,'bk', 1),
    (41,'bk', 5),
    (42,'rt', 2),
    (43,'bk', 3),
    (44,'rt', 1);

CREATE TABLE books (`ident` int,`id1` int, `time` varchar(8), `id2` int);
INSERT INTO books (`ident`, `id1`, `time`, `id2`) VALUES
    (40, 10, '18:07:00', 20),
    (43, 11, '05:00:00', 21),
    (44, 12, '21:01:00', 22),
    (41, 13, '10:00:00', 23),
    (42, 14, '23:10:00', 24);
#--------------------------
SELECT 
  CASE 
    WHEN wall.type='bk' 
    THEN  CONCAT(books.id1,'-',books.id2) 
 END AS column_1

FROM wall JOIN books ON books.ident = wall.ident GROUP BY wall.ident ORDER BY wall.ident ASC;

Печать

 column_1
1   10-20
2   13-23
3   NULL
4   11-21
5   NULL

Решение в действии по этой ссылке: http://rextester.com/LHPI38373