【发布时间】:2024-01-14 18:41:01
【问题描述】:
我有这五张桌子
order_type(id,name)
order_stage_install(id,name)
order_stage_remove(id,name)
order_stage_redo(id,name)
orders(id,typeid,stageid)
我需要在这些条件下动态加入订单表
if order.typeid=1
then join order_stage_install on order.stageid=order_stage_install.id
if order.typeid=2
then join order_stage_remove on order.stageid=order_stage_remove.id
我试过了
SELECT *
FROM orders o
CASE
WHEN o.Type IN (1) THEN
JOIN orders_stage os ON o.stageID=os.ID
end
但它在“CASE”错误附近给了我不正确的语法 我对sql中的case语句和if语句进行了研究,但没有希望。任何帮助表示赞赏
【问题讨论】:
-
您不能使用 case 表达式 有条件地连接不同的表。改为使用 LEFT JOIN。
-
即使有一些语法允许您这样做(您可以尝试动态 sql),这意味着对于不同行中的
order.typeid的不同值,您将有不同的列。这当然是不可能的。 -
这是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:*.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
-
你没有说你想做什么。提供无意义的代码不会传达您的想法。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在给出业务关系(船)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。请在代码问题中给出minimal reproducible example--包括剪切、粘贴和可运行的最小代码以及以代码形式给出的最小代表性数据。对于包含 DBMS 和 DDL 的 SQL,包括约束、索引和表格初始化。
标签: sql sql-server join case