2013-11-23 3 views
1

Мне было интересно, можно ли поставить оператор CASE в предложение FROM ... в MySQL? что-то вроде:MySQL: оператор CASE в FROM FROM

SELECT id1 FROM ref_table AS rt WHERE 
EXISTS 
    (SELECT rt.id FROM 
     (CASE rt.table 
     WHEN 'tbl1' THEN tbl_1 
     WHEN 'tbl2' THEN tbl_2 
     WHEN 'tbl3' THEN tbl_3 
     END) AS tbl 
    WHERE tbl.id2 = rt.id_table) 
+0

Там нет никакого способа, с чем-либо подобным синтаксисе, но если вы могли бы описать какова ваша «конечная цель» с запросом, может быть альтернативное решение. –

+0

На самом деле, это не настоящая необходимость, мне просто интересно, возможно ли что-то подобное или нет ... поскольку я знаю о case case в том, где, но никогда не видел ни одного из этого из предложения и, следовательно, моего вопроса ...:) – Snipchain

+1

Результат выражения 'CASE' не может быть таблицей. Так нет. Вы можете переписать запрос с помощью подзапросов 'OR' и 3 EXISTS. –

ответ

1

Результат выражения CASE не может быть таблицей, так что нет, вы не можете использовать этот синтаксис. Вы можете переписать запрос с OR (или CASE) и 3 EXISTS подзапросов:

SELECT id1 FROM ref_table AS rt WHERE 
CASE rt.table 
    WHEN 'tbl1' THEN EXISTS (SELECT 1 FROM tbl_1 t WHERE t.id2 = rt.id_table) 
    WHEN 'tbl2' THEN EXISTS (SELECT 1 FROM tbl_2 t WHERE t.id2 = rt.id_table) 
    WHEN 'tbl3' THEN EXISTS (SELECT 1 FROM tbl_3 t WHERE t.id2 = rt.id_table) 
END ; 

Более читаемый, с OR:

SELECT id1 FROM ref_table AS rt WHERE 
    rt.table = 'tbl1' AND EXISTS (SELECT 1 FROM tbl_1 t WHERE t.id2 = rt.id_table) 
OR rt.table = 'tbl2' AND EXISTS (SELECT 1 FROM tbl_2 t WHERE t.id2 = rt.id_table) 
OR rt.table = 'tbl3' AND EXISTS (SELECT 1 FROM tbl_3 t WHERE t.id2 = rt.id_table) 
;