【发布时间】:2020-02-04 15:35:46
【问题描述】:
我有两个名为 genproductstoreindex 和 QAT_ListElid2 的表。我已经加入了左外连接,但是执行需要很长时间。
SELECT genproductstoreindex.[ElID]
,CASE
WHEN QAT_ListElid2.LeftTSMKEY IS NULL
THEN genproductstoreindex.[TSMKEY]
ELSE QAT_ListElid2.LeftTSMKEY + RightTSMKEY
END
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex
LEFT OUTER JOIN QAT_ListElid2 ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
为了使用 case case 语句优化左外连接,我已替换为以下代码,但数据看起来不正确。请帮我解决这个问题。
DECLARE @lefttsmkey NVARCHAR(30)
SET @lefttsmkey = NULL
IF @lefttsmkey IS NULL
BEGIN
SELECT genproductstoreindex.[ElID]
,genproductstoreindex.[TSMKEY]
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex
LEFT OUTER JOIN QAT_ListElid2 ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
END
ELSE
BEGIN
SELECT genproductstoreindex.[ElID]
,QAT_ListElid2.LeftTSMKEY + RightTSMKEY AS [TSMKEY]
,[Numerical]
,[StringField]
,[DateField]
,[TableLevel]
,[TsmPath]
FROM genproductstoreindex
LEFT OUTER JOIN QAT_ListElid2 ON genproductstoreindex.ListElid = QAT_ListElid2.ListElid
END
【问题讨论】:
-
如果您能提供创建表和插入脚本会很有帮助。
-
在你的第一个查询中使用 where 条件-> where QAT_ListElid2.LeftTSMKEY IS NULL。
-
哪一列属于哪个表?
标签: sql sql-server optimization left-join case