gpt4 book ai didi

sql-server - 如何在 mssql 中执行条件连接?

转载 作者:行者123 更新时间:2023-12-02 06:35:09 24 4
gpt4 key购买 nike

我想根据数据将一个表连接到两个可能的表之一。这是一个没有用的尝试,但我希望能够传达这个想法。此外,这是一个可能不太现实的模拟示例,所以不要过于相信这是代表真实学生和类(class)的想法。

SELECT *
FROM
student
INNER JOIN class ON class.student_id = student.student_id
CASE
WHEN class.complete=0
THEN RIGHT OUTER JOIN report ON report.label_id = inprogress.class_id
WHEN class.complete=1
THEN RIGHT OUTER JOIN report ON report.label_id = completed.class_id
END

有什么想法吗?

最佳答案

您有两个连接条件,如果其中一个为真,您想要提交一个连接 - 这是一个 bool OR 运算。

您只需要:

RIGHT OUTER JOIN report ON (CONDITION1) OR (CONDITION2)

让我们稍微解释一下,什么是条件 1,什么是条件 2?

WHEN class.complete=0
THEN RIGHT OUTER JOIN report ON report.label_id = inprogress.class_id
WHEN class.complete=1
THEN RIGHT OUTER JOIN report ON report.label_id = completed.class_id

在这里,您将条件 1 和条件 2 的两个条件放在一起,因此您的条件 1 是:

class.complete = 0 AND report.label_id = inprogress.class_id

你的条件2是

class.complete = 1 AND report.label_id = completed.class_id

所以完整的 SQL 应该是这样的(这在我脑海中是未经测试的)

RIGHT OUTER JOIN report ON (
class.complete = 0 AND report.label_id = inprogress.class_id
) OR (
class.complete = 1 AND report.label_id = completed.class_id
)

值得一提..

我没有运行上面的连接,但我从经验中知道执行计划绝对可恶,如果性能不重要或者您的数据集很小,那将无关紧要,但如果性能很重要,我强烈建议您在此处发布您想要的范围更广的内容,我们可以讨论一种更好的方法来获取您的特定数据集,而该数据集不会表现得如此糟糕。我个人会写一个像上面那样的连接,只是作为最后的手段,或者如果我正在破解一些真正不相关的东西。

关于sql-server - 如何在 mssql 中执行条件连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com