gpt4 book ai didi

mysql - SQL查询返回Where子句未指定的行

转载 作者:行者123 更新时间:2023-11-29 20:26:22 25 4
gpt4 key购买 nike

我的 SQL 查询不会返回假定由我的 where 子句指定的输出。

这是我的查询:

SELECT 
transaction_details.transaction_id
,transaction_details.transaction_number
,transaction_details.product_id
,Products3.ProductName
FROM transaction_details
INNER JOIN Products3
ON transaction_details.product_id = Products3.productID
INNER JOIN transaction_status
ON transaction_details.transaction_id = transaction_status.transaction_id
WHERE status_of_transaction = 'review'

此查询应返回带有 status_of_transaction = 'review' 的表行。

这是我的表格,其中包含status_of_transaction enter image description here

我尝试了DISTINCT,但它不起作用。

这是我总是得到的输出:

enter image description here

我的查询是否有问题,它返回的表行不是由我的 WHERE 子句指定的?

最佳答案

该集合生成了多行(记住这都是集合理论) - 您在 JOIN 中缺少外键/主键 (FK/PK) 关系。我敢打赌您错过了 INNER JOIN "ON"语句中的一列。可能需要加入两列才能找到正确的解决方案。

我建议要么逐个表将其分开,要么使用 select * 并查找每行之间的列值的差异。一列应该不同 - 您当前无法看到(即隐藏),因为该列不在当前 SELECT 语句中。

试试这个...

SELECT 
transaction_status.*
FROM transaction_details
INNER JOIN Products3
ON transaction_details.product_id = Products3.productID
INNER JOIN transaction_status
ON transaction_details.transaction_id = transaction_status.transaction_id
WHERE status_of_transaction = 'review'

我认为问题出在 transaction_status 连接上。 transaction_details 中的两行的 transaction_id 相同 - 它与 transaction_status 中的两行匹配。 SQL 将创建 4 行——两行匹配“review”,两行匹配“replied”(删除 WHERE 即可查看它们)。这是某种交叉连接。

_status 表是否也包含 transaction_number?需要有一种方法将 transaction_details 中的单行连接到 transaction_status 中的单行。不知何故,_status 行属于 _details 行。查看(或询问 DBA)两个表的 PK/FK 定义。

不知道你的架构 - 我猜解决方案是......

SELECT 
transaction_details.transaction_id
,transaction_details.transaction_number
,transaction_details.product_id
,Products3.ProductName
FROM transaction_details
INNER JOIN Products3
ON transaction_details.product_id = Products3.productID
INNER JOIN transaction_status
ON transaction_details.transaction_id = transaction_status.transaction_id
-- ADDED NEXT LINE
AND transaction_details.transaction_number = transaction_status.transaction_number
-- END Change
WHERE status_of_transaction = 'review'

关于mysql - SQL查询返回Where子句未指定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39292945/

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