join语句中的SQL条件

join语句中的SQL条件,sql,sql-server,Sql,Sql Server,我必须在join(SQL Server)中使用条件语句 如果B.id为null或B.id='则应为A.id2=B.id2而不是A.id=B.id 如果我这样做是否正确: select * from A inner join B on (B.id is not null and B.id <> '' and A.id = B.id) or ((B.id is null or B.id = '') and A.id2 = B.id2) 从上的内部联接B中选择*

我必须在join(SQL Server)中使用条件语句

如果
B.id为null或B.id='
则应为
A.id2=B.id2
而不是
A.id=B.id

如果我这样做是否正确:

   select * from A inner join B on  
   (B.id is not null and B.id <> '' and A.id = B.id) or 
   ((B.id is null or B.id = '') and A.id2 = B.id2)
从上的内部联接B中选择*
(B.id不为null且B.id“”且A.id=B.id)或
((B.id为null或B.id='')和A.id2=B.id2)

我认为这不是解决此问题的最佳方法,但可能很有用,而且非常简单:

SELECT * FROM a INNER JOIN b
 ON a.id = b.id
UNION 
SELECT * FROM a INNER JOIN b
 ON a.id2 = b.id2
 WHERE b.id IS NULL OR b.id = ''

使用
CASE
语句

SELECT *
FROM A
INNER JOIN B
ON  CASE
        WHEN B.id IS NULL OR B.id = '' THEN A.id2
        ELSE A.id
    END
    =
    CASE
        WHEN B.id IS NULL OR B.id = '' THEN B.id2
        ELSE B.id
    END
试试这个代码

  DECLARE @b varchar(50)=(SELECT id FROM b)
DECLARE @a varchar(50)=(SELECT id FROM a)
if ((@b in (null , '')) and (@a in (null , '')))

BEGIN

select * from A inner join B
on
A.name = B.name 

END
else

BEGIN

select * from A inner join B
on A.id = B.id 

END

我认为这不会产生OP想要的结果。我认为对
b.id的否定为NULL或b.id=''
条件应该添加到第一部分。
SELECT *
FROM A
INNER JOIN B
ON  CASE
        WHEN B.id IS NULL OR B.id = '' THEN A.id2
        ELSE A.id
    END
    =
    CASE
        WHEN B.id IS NULL OR B.id = '' THEN B.id2
        ELSE B.id
    END
  DECLARE @b varchar(50)=(SELECT id FROM b)
DECLARE @a varchar(50)=(SELECT id FROM a)
if ((@b in (null , '')) and (@a in (null , '')))

BEGIN

select * from A inner join B
on
A.name = B.name 

END
else

BEGIN

select * from A inner join B
on A.id = B.id 

END