好吧,我首先承认我对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。
答案 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?