我有2张桌子。 TableA
包含 OldLogin 和 NewLogin 列。 TableB
有 ID , IsManager 和 CanChange 。
我正在编写一个带有输入参数login
的存储过程。它最终需要返回TableB
login = ID
中的所有列,但首先需要检查TableA
以查看是否需要使用 NewLogin 。
那么,有人可以帮我写一个查询,上面写着“在TableB
中显示ID =(登录或NewLogin)”的所有列吗?
谢谢!
编辑:添加代码:
DECLARE @login varchar(30) = 'test'
SELECT ISNULL(NewLogin, @login) AS NewLogin, TableB .IsManager, TableB.CanChange
FROM TableA
LEFT JOIN TableB ON TableB.ID = ISNULL(NewLogin, @login)
WHERE OldLogin = @login
只有在TableA中存在@login时,上述代码才有效。如果该表中不存在,我将得不到任何结果。
答案 0 :(得分:0)
如果我理解正确......
SELECT TableB.*
FROM TableB
LEFT JOIN TableA ON TableB.id IN (TableA.OldLogin, TableB.NewLogin)
答案 1 :(得分:0)
如果a为空,则使用IFNULL(a,b)返回b。
编辑:我假设mysql,不确定它是否适用于其他语言。您也可以使用COALESCE,它接受任意数量的args并返回第一个非null参数。DECLARE @login varchar(30) = 'test'
SELECT IFNULL(TableA.NewLogin, @login) AS NewLogin, TableB.IsManager, TableB.CanChange
FROM TableA
LEFT JOIN TableB ON
TableB.ID = IFNULL(TableA.NewLogin, @login)
WHERE OldLogin = @login
答案 2 :(得分:0)
DECLARE @login varchar(30) = 'test'
SELECT DISTINCT TableB.*
FROM TableA
INNER JOIN TableB ON TableB.ID = NewLogin OR TableB.ID = @login