gpt4 book ai didi

sql - 如何为这个 SQL 查询创建单一的 where 条件?

转载 作者:行者123 更新时间:2023-12-01 13:57:45 26 4
gpt4 key购买 nike

我正在使用 MSSQL 2005 Server 并且我有以下 SQL 查询。

IF @CategoryId IN (1,2,3)
BEGIN
INSERT INTO @search_temp_table
SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId,
d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount
FROM Data d
INNER JOIN Keyword k
ON d.DataId = k.DataId
WHERE FREETEXT(k.Keyword, @SearchQ) AND d.CategoryId=@CategoryId AND d.IsSearch=1 AND d.IsApproved=1 ) AS Search_Data
END
ELSE
BEGIN
INSERT INTO @search_temp_table
SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId,
d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount
FROM Data d
INNER JOIN Keyword k
ON d.DataId = k.DataId
WHERE FREETEXT(k.Keyword, @SearchQ) AND d.IsSearch=1 AND d.IsApproved=1 ) AS Search_Data
END

在上面的查询中我有类别条件,

d.CategoryId=@CategoryId

当任何类别被传递时执行,如果没有类别被传递那么我不考虑 where 子句中的类别条件,仅当 if (1,2,3) 中的类别我使用 If- 时才执行类别条件条款,但我们不能在单个 where 查询中执行此操作吗?这意味着只需检查类别中是否存在值(或者如果很简单,那么我们只能检查 1、2、3 个值)然后将应用该条件,否则查询将不考虑类别条件。

有什么办法,使用 CASE 或 NOT NULL 语句??

最佳答案

如果唯一的区别是你的 where 子句那么你可以这样做:

d.CategoryId = COALESCE(@CategoryId, d.CategoryId)

不确定为什么需要 IN 子句 (IN (1,2,3)),因为您提到过检查它的原因是确保它不为 NULL。所以这应该按照您描述的方式工作。

关于sql - 如何为这个 SQL 查询创建单一的 where 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/595603/

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