早上好,
我一直在谷歌搜索这个答案,所以想知道是否有人可以帮助我?基本上我有一个数据库表,它整合了关键字,例如:狗,猫,马,鼠标。结果显示。但是我需要创建一些SQL来说明这两个关键字是否存在,例如马和猫,然后显示这些结果。这样就可以让我们走X路线了。
另一个解决方法或问题是要有一个关键字列表,然后将其存储为值,这意味着如果有人输入:我的狗猛烈地攻击邻居猫,它会检测到狗和猫并会带给用户一个特定的结果..
declare @teststring varchar(512) = '{KEYWORD}'
select top 1 k.type
from (values
('pet', '1'), ('dog', '1'), ('cat', '1')
) k(word,type) where @teststring like '%' + k.word + '%'
group by k.type
HAVING COUNT(1) >=2
order by COUNT(1) desc
你可以看到这是储存猫,狗和宠物。这意味着如果某人输入我的宠物是狗,那么它将沿着有条件的路线前进。 (然后我们将人们输入的答案存储到{Keyword1}
所以我的问题是我只能在我的SQL字段中使用的字符。所以我创建了两个列表(一个列表上面有宠物猫和狗。)。我有的另一个清单完全相同但是(兔子,仓鼠和马)。这存储在{Keyword2}中我希望能够编写一些SQL,说明是否输入了{Keyword1}和{Keyword2}中的任何关键字然后沿着特定的条件路由。因此,如果被兔子打字的人被我的狗袭击了它会检测到兔子和狗,并且会使这个有条件的并且去那里。
我希望这不会太混乱?我已经考虑过嵌套的sql和内部联接,但我不确定这会做什么我想问。
答案 0 :(得分:1)
我不确定你的问题在哪里,你似乎已经覆盖了它,除非你在制作可操作的代码时遇到问题?
也许先这样做:
order by COUNT(1) desc
,>=2
更改为>=1
,('cat', '1'), ('keys', '2'), ('shirt', '2')
,top 1 k.type
替换为任何安慰剂,例如1
或'A'
,然后,之后添加:
IF @@ROWCOUNT >= 2
/* Do some stuff, because both keywords were used */
这个概念是,如果你想有条件地运行一些代码,你通常需要IF / ELSE
,有时你可能会使用TRY / CATCH
或循环。
@@ROWCOUNT
不是检查IF
的主流方式,但它会多次执行,而且我现在想尽可能少地干预您的代码。我可能甚至没有让你开始正确。
原始查询的更改旨在使其生成与找到的关键字组数相对应的记录数量。稍后,您可能已经看到了@@ROWCOUNT
的争议。
答案 1 :(得分:0)
如果您可以将关键字存储为表格,则可以使用intersect:
DECLARE @table1 TABLE (KeyWord VARCHAR (100))
DECLARE @table2 TABLE (KeyWord VARCHAR (100))
INSERT INTO @table1
VALUES
('dog'),('rabbit'),('dragon'),('cat')
INSERT INTO @table2
VALUES
('dog'),('rabbit'),('ogre'),('whale')
SELECT KeyWord FROM @table1
INTERSECT
SELECT KeyWord FROM @table2