如果满足条件,则执行SQL内部联接
我想要一个改进我的sql代码的好方法,当条件满足时,我必须使用内部连接。我目前正在复制代码:如果满足条件,则执行SQL内部联接,sql,sql-server,Sql,Sql Server,我想要一个改进我的sql代码的好方法,当条件满足时,我必须使用内部连接。我目前正在复制代码: @SystemMerge bit if (@SystemMerge=1) BEGIN SELECT ....... FROM myTable INNER JOIN table ON table.param1=myTable.param1 INNER JOIN systemTable on systemTable.param2=myTabl
@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_不信者):
这应该(适当地)做同样的事情:
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
LEFT JOIN systemTable on systemTable.param2=myTable.param2 and @SystemMerge = 1
WHERE (@SystemMerge = 0 OR systemTable.NonNullableColumn IS NOT NULL)
当然,这也意味着对systemTable
中的列的任何其他引用都必须编写为NULL
动态sql如何
declare @sel varchar(max)
set @sel = ' SELECT
.......
FROM myTable
INNER JOIN table ON table.param1=myTable.param1
'
if (@SystemMerge=1)
begin
set @sel = @sel+'INNER JOIN systemTable on systemTable.param2=myTable.param2'
end
exec(@sel)
简单的方法,如果我是对的-
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1 = myTable.param1
INNER JOIN systemTable on @SystemMerge = 0 or systemTable.param2=myTable.param2
向我们展示不起作用的代码。为什么不起作用?你的错误是什么?例如,您可能需要使用动态SQL。您可以基于条件构建动态查询,然后使用EXEC(查询)执行该查询。动态查询示例:拜托,搜索“条件内部联接”有这么难吗?谷歌会给你,例如,在我的情况下没有帮助,但我保留你的答案,以备将来需要。谢谢。好的,我已经改进了答案,现在效果很好。谢谢选了你。
SELECT
.......
FROM myTable
INNER JOIN table ON table.param1 = myTable.param1
INNER JOIN systemTable on @SystemMerge = 0 or systemTable.param2=myTable.param2