join语句中的SQL条件
我必须在join(SQL Server)中使用条件语句 如果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中选择*
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