SQL - 如果列为空,则列出所有数据

SQL - list all data if a column is empty

提问人:Teddy 提问时间:10/28/2021 最后编辑:Teddy 更新时间:10/29/2021 访问量:62

问:

我正在尝试编写一个 WHERE 子句,如果该列为空,则返回所有数据。我有一个csv文件(static_table),其中包括:

enter image description here

如果权限为空,则意味着用户将需要查看所有内容。 因此,如果 hvfg23 用户已登录并运行具有国家、地区和品牌的查询,则每当执行查询时,用户都可以看到每个国家/地区、欧洲地区和所有品牌的数据。

我目前拥有的查询如下所示:

select * from t1
where(select restriction, type from t2 where user_id = {{current_userId()}} )

我无法将查询调整为我真正需要的内容,非常感谢帮助。

SQL 值限制

评论

1赞 Stu 10/28/2021
诸如此类的问题将受益于最小的、可重现的示例
0赞 jarlh 10/28/2021
请注意,在 SQL 中,表有,而不是字段。

答:

0赞 Halima Ghannoum 10/28/2021 #1

如果我很好地理解您的表的结构,那么这将选择当前用户的权限,然后选择其相关信息,以防它不为空,否则选择列,这意味着此列没有条件

declare @country nvarchar(50), @region nvarchar(50), @brand nvarchar(50)

set @country=(Select  [t2].[permission] 
    from [t2] where [t2].[type]='country' 
    and [t2].[user_id] = {{current_userId()}})

set @brand=(Select  [t2].[permission] 
    from [t2] where [t2].[type]='brand' 
    and [t2].[user_id] =  {{current_userId()}})

set @region=(Select  [t2].[permission] 
    from [t2] where [t2].[type]='region'
    and [t2].[user_id] =  {{current_userId()}})

select * from [t1] where
[t1].[country]= case when @country IS NULL
    then [t1].[country]  else @country end 
and [t1].[brand]= case when @brand IS NULL 
    then [t1].[brand]  else @brand end
and [t1].[region]= case when @region IS NULL
    then [t1].[region]  else @region end

评论

1赞 tdy 10/28/2021
请考虑简要说明这如何以及为什么可以解决问题。这将有助于未来的读者更好地理解您的解决方案。