【发布时间】:2013-07-23 13:56:45
【问题描述】:
我想要一个改进我的 sql 代码的好方法,我必须在满足条件时使用内连接。我目前正在复制代码:
@SystemMerge bit
if (@SystemMerge=1)
BEGIN
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
INNER JOIN systemTable on systemTable.param2=myTable.param2
END
ELSE
BEGIN
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
END
我想这样做:
@SystemMerge bit
BEGIN
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
***//the next 4 lines is not working, but this pseudo of what i want:***
if (@SystemMerge=1)
begin
INNER JOIN systemTable on systemTable.param2=myTable.param2
end
编辑: 解决方案(感谢@Damien_The_Unbeliever):
LEFT JOIN systemTable ON systemTable.param2=myTable.param2
WHERE
((@SystemMerge=1 AND systemTable.param2 is not null)
OR
(@SystemMerge=0 OR @SystemMerge is null))
【问题讨论】:
-
向我们展示不起作用的代码。为什么它不起作用你得到的错误是什么?也许是一些数据的例子
-
你可能想使用动态sql
-
您可以根据条件构建动态查询,稍后使用 EXEC(query) 执行该查询。
-
C'Mon,搜索“Conditional Inner Join”有那么难吗?谷歌会给你例如stackoverflow.com/questions/7268604/conditional-inner-join
标签: sql sql-server