无法在sql语句中检索行

时间:2016-12-22 18:31:42

标签: mysql sql

我想选择有第29章的书籍和有第30章的书籍等等。我尝试了下面的代码,但它只返回有第29章而不是30,31,32

的书籍
SELECT distinct book FROM `bible_kjv` WHERE chapter in (29,30,31,32,33,34,35);

请问如何重写代码

5 个答案:

答案 0 :(得分:3)

代码似乎很好。这可能是数据类型的问题吗?列“章节”设置为什么类型?

答案 1 :(得分:1)

如果您执行Distinct并返回Genesis,则表示您已满足查询条件。 Genesis有超过29个并且被退回。当你达到30岁时,你已经回归了Genesis,所以你只能看到它一次。你想要介于或大于。

SELECT b.book FROM Bible b WHERE chapter >= 29;

我不确定你需要完成什么,或者你想象的那样。另见Chris Caviness评论。

编辑:

SELECT b.book FROM Bible b WHERE chapter BETWEEN 29 AND 35;

答案 2 :(得分:1)

请记住:

SELECT distinct book FROM `bible_kjv` WHERE chapter in (29,30,31,32,33,34,35);

与此不同:

SELECT distinct book FROM `bible_kjv` WHERE chapter in ('29,30,31,32,33,34,35');

第一个将章节与七个整数值进行比较。第二章将章节与单个字符串进行比较,由于章节可能是整数,因此它将字符串转换为数字值。在MySQL中,' 29,30,31,32,33,34,35'的数值。是29(它读取前导数字,并忽略逗号之后的所有内容)。

我怀疑你的代码中有更多关于你在这个问题上没有分享的内容。

我猜你试图使用参数化查询并传递一个包含章节列表的字符串。这不是参数的工作原理。一个参数只能取代单个标量值,而不能取代值列表。

如果要使用参数,则必须使用七个参数占位符。

答案 3 :(得分:0)

您将获得29到35之间的记录,然后使用此查询

SELECT b.book FROM Bible b WHERE chapter between 29 to 35;

如果你想要29到35之外的记录,那么使用

SELECT b.book FROM Bible b WHERE chapter not between 29 to 35;

答案 4 :(得分:0)

SELECT book FROM Bible WHERE chapter BETWEEN 29 AND 35;