我想加入mysql数据库中不同表中的一组列。我的问题是,并不是所有的值都写在同一个表中。具体示例:在一个表中有sid列。根据本列中的值,我在此联接中需要的下一个值位于不同的表中。如果sid值等于1,则必须与表2连接才能得到我想要的值,如果sid值仅为1,则必须与表3连接。我对mysql中的If - else进行了一些研究,但我能够找到的所有信息都是关于更改值以及在特定条件下如何显示值的。我希望工作流在特定条件下进行更改。
无论执行哪个联接,结果表的列数都是相同的。我实际上没有显示来自表2和表3的任何数据。descr列存在于表4中。所有其他显示的列都存在于表1中。因此,显示不应该出现任何问题。
代码如下(受python启发):
SELECT type, s_type, id, descr
FROM table1
IF sid = 1 THEN
LEFT JOIN table2
ON table1.sid = table2.sid
LEFT JOIN table4
ON table2.sid = table4.id_name
ELSE
LEFT JOIN table3
ON table1.sid = table3.svid
LEFT JOIN table4
ON table3.svid = table4.id_name
END IF;在mysql中实现这个控制流的正确方法是什么?
发布于 2021-09-20 15:35:19
这在SQL中不能使用IF。如果我理解逻辑,你可以这样做:
SELECT type, s_type, id, table4.descr
FROM table1 LEFT JOIN
table2
ON table1.sid = table2.sid AND table1.sid = 1 LEFT JOIN
table3
ON table1.sid = table3.svid AND table1.side <> 1 LEFT JOIN
table4
ON table4.id_name = COALESCE(table3.svid, table2.sid)如果您的表很大,那么COALESCE()可能是一个性能杀手。
https://stackoverflow.com/questions/69257126
复制相似问题