gpt4 book ai didi

mysql - 为什么查询一旦放入存储过程就会给出不同的结果?

转载 作者:行者123 更新时间:2023-11-29 00:34:55 24 4
gpt4 key购买 nike

我已经阅读了下面列出的几篇文章,试图找到我的问题的答案。他们似乎都有同样的问题。

我看到了this one但我在 MySQL 文档中读到,默认情况下所有过程都是非确定性的。

This one与我的问题无关,因为它是 SQL Server(不是 MySQL)。

这是我用来创建过程的查询:

CREATE PROCEDURE getcusbyzip(zipcode VARCHAR(30),radius VARCHAR(30))
SELECT C.CustomerName, C.MenuId
FROM Customers C
INNER JOIN (

SELECT ZIPCODE, ( 3959 * ACOS( COS( RADIANS( (

SELECT Z.LAT
FROM ZipCodes Z
WHERE Z.ZIPCODE =zipcode
LIMIT 0 , 1
) ) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LNG ) - RADIANS( (

SELECT Z.LNG
FROM ZipCodes Z
WHERE Z.ZIPCODE =zipcode
LIMIT 0 , 1
) ) ) + SIN( RADIANS( (

SELECT Z.LAT
FROM ZipCodes Z
WHERE Z.ZIPCODE =zipcode
LIMIT 0 , 1
) ) ) * SIN( RADIANS( LAT ) ) ) ) AS distance
FROM ZipCodes
HAVING distance <radius
ORDER BY distance
LIMIT 0 , 20
) AS RelevantCodes ON ( C.ZIPCODE = RelevantCodes.ZIPCODE )

现在如果我在那个查询之后运行这个查询:

CALL getcusbyzip(08360,50)

我得到零行返回。但是,如果我在过程中运行与查询完全相同的语句,并像这样放入参数:

SELECT C.CustomerName, C.MenuId
FROM Customers C
INNER JOIN (

SELECT ZIPCODE, ( 3959 * ACOS( COS( RADIANS( (

SELECT Z.LAT
FROM ZipCodes Z
WHERE Z.ZIPCODE =08360
LIMIT 0 , 1
) ) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LNG ) - RADIANS( (

SELECT Z.LNG
FROM ZipCodes Z
WHERE Z.ZIPCODE =08360
LIMIT 0 , 1
) ) ) + SIN( RADIANS( (

SELECT Z.LAT
FROM ZipCodes Z
WHERE Z.ZIPCODE =08360
LIMIT 0 , 1
) ) ) * SIN( RADIANS( LAT ) ) ) ) AS distance
FROM ZipCodes
HAVING distance <50
ORDER BY distance
LIMIT 0 , 20
) AS RelevantCodes ON ( C.ZIPCODE = RelevantCodes.ZIPCODE )

我得到了我想要的。答案应该只有一行,但为什么结果不是在程序中出现,而是当我把它放在一个程序中时,它不会给我一行。

我想可能是因为我没有 BEGIN 和 END,但是当我将它们放在创建行之后,将 END 放在最后一行之后时,它无法生成程序。

最佳答案

您的示例代码和存储过程代码彼此相差太大。

为了确定您的问题,您需要执行以下操作

在示例代码的顶部(不是 SP)

  • 声明一个名为 zipcode 的变量,类型为 varchar(30)
  • 声明一个名为 radius 的变量,类型为 varchar(30)

然后,将示例代码的其余部分修改为与存储过程完全相同。

您将能够使用此方法准确识别问题。

如评论中所述,这可能是由于滥用 varchars 被转换为数字。

总结

在示例代码的顶部声明并设置变量,以便示例的其余部分与存储过程完全相同。然后你就可以开始识别问题了。

关于mysql - 为什么查询一旦放入存储过程就会给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com