如何检查一个表中的条目,但如果它不存在则使用默认值?

时间:2012-11-08 20:14:32

标签: sql sql-server stored-procedures join

我有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时,上述代码才有效。如果该表中不存在,我将得不到任何结果。

3 个答案:

答案 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