2013-11-23 49 views
1

我想知道是否有可能在CAS子语句中的FROM子句中...在MySQL中? 类似:MySQL:FROM子句中的CASE语句

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

实际上,这不是一个真正的需要,我只是想知道如果这样的事情是可能的或不是...因为我知道关于案件陈述在哪里但从未见过任何这样的从条款,因此我的问题......: ) – Snipchain

+1

“CASE”表达式的结果不能是表格。所以不行。你可以用'OR'和3 EXISTS子查询重写查询。 –

回答

1

一个CASE表达式的结果不能是表,所以不,你不能使用此语法。

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:你可以用OR(或CASE)和3 EXISTS子查询重写查询

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) 
;