mysql中的条件连接

18 mysql conditional join

我有一个表id1,id2,type.type是包含另一个表的名称的枚举值.我想join用表格的名称进行预制type.例如:

switch($type)
case 'table1':
   join table1;
   break;
case 'table2':
   join table2;
   break;
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Gre*_*reg 19

你不能直接这样做......你可以做这样的事情(不是很漂亮......):

SELECT
t.id,
t.type,
t2.id AS id2,
t3.id AS id3

FROM t
LEFT JOIN t2 ON t2.id = t.id AND t.type = 't2'
LEFT JOIN t3 ON t3.id = t.id AND t.type = 't3'
Run Code Online (Sandbox Code Playgroud)


Ste*_* B. 6

丑陋的方式:

表类型,T1,T2:

SELECT ... FROM Types, T1 , where Types.ID=T1.Types_ID AND Types.TYPE='TABLE1'
UNION
SELECT ... FROM Types, T2 , where Types.ID=T2.Types_ID AND Types.TYPE='TABLE2'
Run Code Online (Sandbox Code Playgroud)

  • 史蒂夫停止与自己战斗:P (14认同)
  • 这不仅仅是"方式"吗?别用我的名字. (2认同)
  • 这是"A"方式.它看起来很难看,我希望有更好的.但是再次"SELECT*FROM X"之外的大多数SQL看起来都很难看;) (2认同)

小智 5

除了先前的答案:您可以使用IF语句将两个左联接结果组合:IF(t.type ='t2',t2.id,t3.id)作为type_id

您可以在mysqldiary.com上看到另一个mysql条件连接示例