0

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

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

我正在查看的 SQL 表具有 Counties 列和 Category 列。Counties 是一个文本字符串,其中所有县都用逗号分隔。类别也是一个文本字符串,但只是一个单词字符串。所以我需要查询这个表并带回与下拉列表共享相同类别或县的任何行。

这是我写在纸上的伪查询,至少应该在这里描述我的想法:

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

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

4

4 回答 4

2

执行“is substring of”最一致的方法是使用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||','。

于 2013-08-02T18:53:17.057 回答
1

试试 LIKE 关键字:

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

% 是 LIKE 语句中的通配符。

于 2013-08-02T18:51:22.417 回答
1

这应该为你工作

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

注意我添加逗号的方式,在上面的查询中考虑到 csv

于 2013-08-02T18:53:45.880 回答
0

您是否考虑过创建两个表?字段:CountyID [主键]、CountryName)和类别字段:CategoryId [主键]、CategoryName)。

然后您可以创建第三个表 - CountyCategories有两个字段:CountryIdCategoryId作为主键)。

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?
于 2013-08-02T19:09:43.613 回答