2017-04-18 84 views
1

我想从电影数据库中检索类型字段等于“HOR”(对于恐怖)但某些记录有多个类型(HOR,COM,ADV )和我的查询只返回记录等于“HOR”的结果。我如何检索具有“HOR”类型的所有记录?sql查询不检索正确的结果

我的查询:

selectCommand = "SELECT Type from DVDs WHERE Type = HOR"; 

注:

  • 在数据库中的类型字段是使用Visual Studio 2015年

  • 一个简短的文字

  • 我在C#编码

+0

关联创建第二个表你能详细说明数据和结果吗?这个查询肯定会*只*返回记录'WHERE Type = HOR'。但是这个查询也没有意义,因为你正在查询你已经有的确切数据......类型。看起来可能你所展示给我们的范围之外的东西是错误的。 – David

+0

如何存储多种类型的记录?所有三个(HOR,COM,ADV)可以同时存储在同一个“单元格”中吗? –

+1

让我说,虽然下面的工作答案,你仍然有一个在数据库设计中的大问题。您应该创建一个代表多个胶片类型的表格,而不是使用具有多个代码的字符串。在这样的表格(FilmCategory)中,您应该有电影表的主键和代表类别的第二个字段。然后,您为类别为HOR,COM和ADV的文件存储三条记录。现在您可以查询类别HOR和ADV的电影。试着用建议的解决方案来做到这一点。 – Steve

回答

1

假设您的类型全部位于"HOR,COM,ADV"之类的同一列中,请将您的=更改为LIKE,并在搜索字符串(HOR在此情况下)周围使用通配符%

selectCommand = "SELECT Type from DVDs WHERE Type LIKE '%HOR%'"; 

这将列值中搜索字符串HOR的任何地方,而不仅仅是那些价值是完全HOR列。

+0

感谢您的明确定义!完美的作品。 –

+0

很高兴能帮到你!如果这适用于您,请点击答案左侧的绿色复选标记。 =) –

0

尝试

"SELECT Type from DVDs WHERE Type LIKE '%HOR%' "; 
1

虽然“喜欢”的比赛就可以了(和其他人理所当然地解释得很好),我建议考虑重组你的数据。使用文本字段的方式实际上不是SQL设计用于的方式。

一个问题是你真的无法对它进行输入验证。一般来说,您可以拥有(并且最好拥有)数据库完整性 - 检查您输入的数据。这样,没有人可以误入HAR(而不是HOR)之类的东西。

其次,您不能以后有任何选项可能包含您正在寻找作为子字符串的组合之一的该字段。

第三,根据数据库大小和负载,你会把它放在下面,这不是一个非常高效的解决方案。

我敢肯定有原因,我忘了,但至少这些原因,我会推荐为电影与流派,其中主键是(filmid,genreid)