我正在努力解决这个问题:我有两个SQL语句,它们有两组不同的关键字。这些存储在临时表中,因为我无法更新,删除或插入表中。
如何编写第三条SQL语句(限制在每个语句中的SQL字符),其中包含:"如果' pingu'并且' noot'是正确的,否则如果' sponge'和' bob'是真实的展示结果" (这个有效)?但那我怎么说:"如果' pingu'和'海绵'然后选择为true,或者“bob”'并且' noot'然后选择真实",但保持' pingu'并且' noot'如果被选中则为真?
关键字列表1的示例:' Pingu '和' Noot '
DECLARE @teststring varchar(512) = '{KEYWORD}'
SELECT TOP 1 k.type
FROM (VALUES
('pingu', '66'), ('noot', '66'))
k(word,type) WHERE @teststring LIKE '%' + k.word + '%'
GROUP BY k.type
HAVING COUNT(1) >=2
ORDER BY COUNT(1) DESC;
关键字列表2的示例:' 海绵'和' Bob '
DECLARE @teststring varchar(512) = '{KEYWORD}'
SELECT TOP 1 k.type
FROM (VALUES ('sponge', '66'), ('bob', '66')) k (word, type)
WHERE @teststring LIKE '%' + k.word + '%'
GROUP BY k.type
HAVING COUNT(1) >= 2
ORDER BY COUNT(1) DESC;
答案 0 :(得分:0)
如何将两个源查询与UNION ALL
组合?
例如(调整原始查询):
DECLARE @teststring varchar(512) = '{KEYWORD}';
WITH Keywords AS (
SELECT *
FROM (VALUES ('pingu', '66'), ('noot', '66')) k(word, type)
UNION ALL
SELECT *
FROM (VALUES ('sponge', '66'), ('bob', '66')) k(word, type)
)
SELECT TOP 1 k.type
FROM Keywords k
WHERE @teststring LIKE '%' + k.word + '%'
GROUP BY k.type
HAVING COUNT(1) >=2
ORDER BY COUNT(1) DESC;
如果在@teststring
中找到至少两个关键字,无论哪个来源查询来自关键字,
注意:如果关键字列表很大,则可能需要重新处理查询,以便可以使用索引来更有效地处理WHERE
子句。