MySQL 根据 IF 条件从两个 table 之一加入
MySQL JOIN from one of the two table based on IF condition
SELECT Table1.Filter, Table1.Condition, Combined.Data FROM Table1
LEFT JOIN
(SELECT Key, Data FROM IF(Table1.Filter, Table2, Table3))) AS Combined
ON Table1.Condition = Combined.Key
我想创建一个 MySQL 视图,显示 Table1
的所有列,以及 Table2
或 Table3
中的一列,具体取决于 [=] 上的字段16=].
一个简单的解决方案是 LEFT JOIN
Table2
和 Table3
,在不适用的列上添加 NULL
。有没有办法避免创建 2 列?
我不能 UNION
Table2
和 Table3
因为它们可能包含相同的 Key
.
下面应该做你想做的:
SELECT t1.Filter, t1.Condition,
COALESCE(t2.Data, t3.Data) as Data
FROM Table1 t1 LEFT JOIN
Table2 t2
ON t1.Filter AND t2.Key = t1.Condition LEFT JOIN
Table3 t3
ON (NOT t1.Filter) AND t3.key = t1.condition;
您不能让条件选择 FROM
中的表格。但是,您可以在 ON
条件中设置条件。
SELECT Table1.Filter, Table1.Condition, Combined.Data FROM Table1
LEFT JOIN
(SELECT Key, Data FROM IF(Table1.Filter, Table2, Table3))) AS Combined
ON Table1.Condition = Combined.Key
我想创建一个 MySQL 视图,显示 Table1
的所有列,以及 Table2
或 Table3
中的一列,具体取决于 [=] 上的字段16=].
一个简单的解决方案是 LEFT JOIN
Table2
和 Table3
,在不适用的列上添加 NULL
。有没有办法避免创建 2 列?
我不能 UNION
Table2
和 Table3
因为它们可能包含相同的 Key
.
下面应该做你想做的:
SELECT t1.Filter, t1.Condition,
COALESCE(t2.Data, t3.Data) as Data
FROM Table1 t1 LEFT JOIN
Table2 t2
ON t1.Filter AND t2.Key = t1.Condition LEFT JOIN
Table3 t3
ON (NOT t1.Filter) AND t3.key = t1.condition;
您不能让条件选择 FROM
中的表格。但是,您可以在 ON
条件中设置条件。