首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在If语句中执行联接

在If语句中执行联接
EN

Stack Overflow用户
提问于 2021-09-20 15:30:42
回答 1查看 37关注 0票数 0

我想加入mysql数据库中不同表中的一组列。我的问题是,并不是所有的值都写在同一个表中。具体示例:在一个表中有sid列。根据本列中的值,我在此联接中需要的下一个值位于不同的表中。如果sid值等于1,则必须与表2连接才能得到我想要的值,如果sid值仅为1,则必须与表3连接。我对mysql中的If - else进行了一些研究,但我能够找到的所有信息都是关于更改值以及在特定条件下如何显示值的。我希望工作流在特定条件下进行更改。

无论执行哪个联接,结果表的列数都是相同的。我实际上没有显示来自表2和表3的任何数据。descr列存在于表4中。所有其他显示的列都存在于表1中。因此,显示不应该出现任何问题。

代码如下(受python启发):

代码语言:javascript
复制
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中实现这个控制流的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 15:35:19

这在SQL中不能使用IF。如果我理解逻辑,你可以这样做:

代码语言:javascript
复制
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()可能是一个性能杀手。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69257126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档