我想选择有第29章的书籍和有第30章的书籍等等。我尝试了下面的代码,但它只返回有第29章而不是30,31,32
的书籍SELECT distinct book FROM `bible_kjv` WHERE chapter in (29,30,31,32,33,34,35);
请问如何重写代码
答案 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;