Mysql 无法检索sql语句中的行

Mysql 无法检索sql语句中的行,mysql,sql,Mysql,Sql,我想选择有第29章的书和有第30章的书等等。我尝试了下面的代码,但它只返回包含第29章但不包含30、31、32章的书籍 SELECT distinct book FROM `bible_kjv` WHERE chapter in (29,30,31,32,33,34,35); 请告诉我如何重写代码代码似乎很好。这可能是数据类型的问题吗?“chapter”列设置为什么类型?代码似乎没有问题。这可能是数据类型的问题吗?“chapter”列设置为什么类型?如果执行了一个Distinct并返回Gene

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

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

请告诉我如何重写代码

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

代码似乎没有问题。这可能是数据类型的问题吗?“chapter”列设置为什么类型?

如果执行了一个
Distinct
并返回Genesis,则表示您已经满足了查询条件。《创世纪》有29部以上的电影,现在又回来了。当你30岁的时候,你已经回到了创世纪,所以你只能看到它一次。您想要介于或大于之间

SELECT b.book FROM Bible b WHERE chapter >= 29;
我不知道你需要完成什么,除了这个或者你想象它是什么样子。另请参见Chris Caviness的评论

编辑:


从第29章和第35章的圣经b中选择b.book

如果执行
Distinct
并返回Genesis,则表示您已满足查询条件。《创世纪》有29部以上的电影,现在又回来了。当你30岁的时候,你已经回到了创世纪,所以你只能看到它一次。您想要介于或大于之间

SELECT b.book FROM Bible b WHERE chapter >= 29;
我不知道你需要完成什么,除了这个或者你想象它是什么样子。另请参见Chris Caviness的评论

编辑:


从第29章和第35章的圣经b中选择b.book

您将获得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;

您将获得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;

请记住:

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(它读取前导数字,忽略逗号以外的所有内容)

我怀疑你的代码中有更多你没有分享的问题

我猜您试图使用参数化查询,并在章节列表中传递了一个字符串。参数不是这样工作的。一个参数只能代替单个标量值,不能代替值列表


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

请记住:

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(它读取前导数字,忽略逗号以外的所有内容)

我怀疑你的代码中有更多你没有分享的问题

我猜您试图使用参数化查询,并在章节列表中传递了一个字符串。参数不是这样工作的。一个参数只能代替单个标量值,不能代替值列表



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

您的意思是该书应包含所有第29、30、31、32章吗?不,我的意思是它应单独选择这些书,该书可能包含第29章,但不包含第30章。我想选择至少有一个章节的所有书籍,或者我必须为每个章节编写单独的sql语句。i、 e sql用于第29章,另一个用于第30章等等,在我看来,您的查询非常好。有什么问题吗?您可以发布示例数据吗?查询看起来不错,请检查字段类型以确保不需要(“29”、“30”…)而不是数字??如果它是真正的数字,那么你可以说chapter>=29或chapter between,如果范围像你的例子。你是说这本书应该有所有的章节29,30,31,32吗?不,我的意思是它应该单独选择书,书可能有第29章,但没有第30章。我想选择至少有一个章节的所有书籍,或者我必须为每个章节编写单独的sql语句。i、 e sql用于第29章,另一个用于第30章等等,在我看来,您的查询非常好。有什么问题吗?您可以发布示例数据吗?查询看起来不错,请检查字段类型以确保不需要(“29”、“30”…)而不是数字??如果它是真正的数字,那么你可以说chapter>=29或者“chapter between”,如果范围像你的例子。是的,你是对的。代码很好。我使用了错误的数据,所以我没有得到预期的结果是的,你是对的。代码很好。我使用了错误的数据,所以我没有得到预期的结果。我能想到的是《星际迷航III》中的大耳朵怪物《创世纪》!是的,这个代码也应该有效,但我只想在29到35之间,而不是我能想到的是《星际迷航III》中的大耳朵怪物《创世纪》!是的,这个代码也应该有效,但是我只想在29到35之间,而不是更大。谢谢比尔,我注意到了这一点,我传递了一个带有
内爆(',',$arr)
的值数组,好的,但是内爆()的结果是一个字符串。您还没有展示如何将此值与SQL查询相结合。如果您使用的是参数化查询,并且您只传递了一个字符串,这将与上面的第二个示例类似,就像您在数字字符串周围加引号一样。只使用第一个数字。谢谢Bill,我注意到了这一点,我传递了一个带有
内爆(',',$arr)
的值数组,好的,但是内爆()的结果是一个字符串。您还没有展示如何将此值与SQL查询相结合。如果您使用的是参数化查询,并且您只传递了一个字符串,这将与上面的第二个示例类似,就像您在数字字符串周围加引号一样。仅使用第一个数字。