较低的中级SQL查询:使用子字符串和OR

时间:2013-08-02 18:46:47

标签: c# asp.net sql web

好吧,我首先承认我对SQL很新。到目前为止,我可能已经进行了不到十几个查询,其中大多数都非常简单。现在我有一个中级问题,我需要使用SQL的子字符串函数和OR功能,这是我从未做过的。这是问题/思考模式:

所以在网页上,我有2个下拉列表,一个指定Category,另一个指定County。我需要从这些下拉列表中获取Category和County,并根据它们进行SQL查询。

我正在查看的SQL表有列Counties和列Category。 Counties是一个文本字符串,其中所有的县都用逗号分隔。 Category也是一个文本字符串,但只是一个单词字符串。因此,我需要查询此表并返回与下拉列表共享相同Category OR County的所有行。

这是我在纸上写下的Pseudoquery,至少应该在这里描述我的想法:

"SELECT * FROM ScholarshipsTable WHERE Category = '" + DDL1.Value() "' OR '" DDL2.Value() "' IS_SUBSTRING_OF Counties"

有谁能告诉我,我是否在这里?我认为我根本没有正确使用Substring。

4 个答案:

答案 0 :(得分:2)

最一致的做法是“子串”是使用like

SELECT *
FROM ScholarshipsTable
WHERE Category = '" + DDL1.Value() "' OR '" Counties like '%" + DDL2.Value() + "%'";

编辑:

在这个问题中埋葬的是,国家下拉是一个以逗号分隔的名单。我认为这回答了这个问题:

SELECT *
FROM ScholarshipsTable
WHERE Category = '" + DDL1.Value() "' OR
      " concat(',', Counties, ',') like '%," + DDL2.Value() + ",%'";

这里的区别是like模式和参数中的逗号。这可以防止两个县之间混淆,其中一个名字包含在另一个名称中。

请注意,我使用了函数concat(),因为没有指定数据库。这可能是','+Counties+','或','|| Counties ||','。

答案 1 :(得分:1)

尝试使用LIKE关键字:

SELECT * FROM ScholarshipsTable
WHERE Countries LIKE '%PHRASE 1%' OR
      Countries LIKE '%PHRASE 2%'

%是LIKE语句中的通配符。

答案 2 :(得分:1)

这应该为你做的工作

 SELECT * FROM ScholarshipsTable WHERE Category = '" + DDL1.Value() +"' OR  category like '%," + DDL2.Value()+ ",%'"

请注意我在上述查询中添加逗号的方式,以便将csv纳入帐户

答案 3 :(得分:0)

你考虑过创建两张桌子吗? 字段:CountyID [主键],县名)和类别字段:CategoryId [主键],CategoryName )。

然后你可以用两个字段创建第三个表 - CountyCategories CountyId CategoryId 作为主键 >)。

应该为CountyName和CategoryName编制索引。

你的陈述会像这样

SELECT *
FROM CategoryCounties CC
INNER JOIN Categories C on C.CategoryId = CC.CategoryId
INNER JOIN Counties CO on CO.CountyId = CC.CountyId
WHERE CC.CategoryId = 3
OR CO.CountyName = 'My County'  -- Are you sure you want to ORing instead of ANDing?