gpt4 book ai didi

sql - TSQL,如何避免 if 条件?

转载 作者:行者123 更新时间:2023-12-01 15:08:49 25 4
gpt4 key购买 nike

我来自过程编程背景,最近我的新工作结束了编写 TSQL。我的心态仍然在考虑用 if 条件编写查询。如何避免以下没有 if 条件的查询。

DECLARE @NumAddress INT

SELECT
@NumAddress = COUNT(*)
FROM Address
WHERE UserID = 1001

IF @NumAddress > 0
BEGIN
SELECT
u.FullName, a.Address AS Address
FROM
Users u
JOIN Address a ON a.UserID = u.UserID
WHERE
u.UserId = 1000
END
ELSE
BEGIN
SELECT
u.FullName, NULL AS Address
FROM
Users u
WHERE
u.UserId = 1000
END

注意:我的示例查询是实际查询的简化示例。所以请忽略这个并给我一个例子,这样我怎么能避免像这样的 IF 条件。提前致谢。

最佳答案

在这种特定情况下,您最好使用 left join :

select
u.FullName,
a.Address
from
users u
left join address a on
a.userid = u.userid
where
u.userid = 1000

如果未找到匹配项,这将返回 address 列的所有 null

但是,要从更一般的意义上回答您的问题,您可以使用 case statement在您的查询中避免大声疾呼:

select
u.fullname,
case
when (select count(*) from address where userid = u.userid) > 0 then 1
else 0
end as AddressSupplied
from
users u
where
userid = 1000

case 是 SQL 中的一个 switch 语句,所以你可以这样做:

case col_name
when 'Val1' then 'Yup'
when 'Val2' then 'Well...'
when 'Val3' then 'Nope.'
else 'What now?'
end

这将检查每一行的列 col_name,如果它是指定值之一,它将返回正确的 then。因此,示例查询和结果集是:

select
col_name,
case col_name
when 'Val1' then 'Yup'
when 'Val2' then 'Well...'
when 'Val3' then 'Nope.'
else 'What now?'
end as some_col
from
tableA

--------------------
col_name some_val
--------------------
Val1 Yup
Val2 Well...
Val1 Yup
Val4 What now?
Val3 Nope.

这也适用于 where 子句,这对于半条件查询非常方便:

where
userid = case when @somevar > 0 then 1000 else 1001 end

关于sql - TSQL,如何避免 if 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com