让我们说我有一个标记系统,它将每篇文章的标记存储为整数列表。任何人都可以发布文章,这会导致标签变得格外混乱,例如标签可能是x和y,但两者都是x。
我想要做的是创建两个表,一个具有ID和Tag列(标签),另一个具有Alias和Tag_ID列(别名),哪种类型的SQL查询最有效地工作在搜索文章时,获取可以作为别名引用的标记。
我能想到的最好的是两个查询,第一个获取任何别名(然后使用代码检查count == 1),然后从Tags表中获取最终标记。哪个是......
SELECT Tag_ID FROM Aliases WHERE Alias='UserInput';
#Perform check to see if there are 0 results
Select ID FROM Tags WHERE Tag='UserInput';
有没有办法像
那样做SELECT Tags.Tag FROM Tags
INNER JOIN Aliases
ON Aliases.Tag_ID=Tags.ID
WHERE ...?
我无法弄清楚如何执行SQL语句的WHERE子句,如果它甚至可以按照我想要的方式工作......我能想到的最好的方法是使用OR子句并检查Aliases.Alias和Tags。单独标记......
很抱歉,如果这没有意义,它是所有概念信息,我希望在SQL端获得正确,以确保它不会成为开发中的障碍我开始......
修改
作为澄清,我试图解决" y"到" x"。因此,如果在Aliases
表格中,{em>一个 CSharp alias
,其中<{1>} 1 ,并且tag_id
1}}表, C# Tags
,其中<{1>} 1 ,SQL语句应检索 C#,与是否存在或不是用于搜索的别名无关。
我希望能够在Single Efficient SQL语句中执行此操作。
答案 0 :(得分:0)
我认为这就是你想要的
select a.tag_id, Tags.tag
from tags
join aliases a on a.tag_id = tags.id
where tags.tag = a.alias
如果您要搜索包含该标记的别名,则可以使用like
关键字:
select a.tag_id, Tags.tag
from tags
join aliases a on a.tag_id = tags.id
where tags.tag like '%' a.alias '%'
结论:不可能做你想做的事,因为你无法猜出标签和单词之间的联系是什么。但是,like
解决方案可能是您可以提供的最接近的解决方案。