如果满足条件,SQL 执行内连接

标签 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=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_Unknowner):

LEFT JOIN systemTable ON systemTable.param2=myTable.param2
WHERE 
   ((@SystemMerge=1 AND systemTable.param2 is not null) 
   OR
   (@SystemMerge=0 OR @SystemMerge is null))

最佳答案

这应该(大约)做同样的事情:

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 执行内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828117/

相关文章:

java - 非常基本的 OrientDB/TinkerPop 属性图数据库问题

sql - 输出插入的 T-SQL

sql-server - 如何使用 MERGE 的 'When not matched' 在同一个表中插入新记录?

sql-server - 将所有列连接成一个字符串

c# - 导入以分号分隔的 CSV 文件

sql - 如何删除 SQL Server 中的前导引号和尾随引号?

mysql - 在同一列上使用多个 WHERE 条件进行选择

python - Python SQL 语句中的变量

python - django queryset "contains"用于列表,而不是字符串

sql - 如何在postgres中获取具有最大时间戳的行?