gpt4 book ai didi

mysql - 使用 OUTER JOIN 时缺少列数据

转载 作者:行者123 更新时间:2023-11-29 12:35:32 26 4
gpt4 key购买 nike

在我开始之前;这不是正常的 MySQL JOIN 问题...据我所知,这不是一个基本的 JOIN 问题。

本质上,我的问题归结为我正在运行的查询,尽管数据存在,但它似乎没有返回所有外部连接。奇怪的是,如果我使用内部联接,则会返回数据;另外,如果我使用汇总函数(同时使用外连接),也会返回数据。

我们正在运行 MariaDB:

mysqld --version
mysqld Ver 10.0.12-MariaDB-1~wheezy-log for debian-linux-gnu on x86_64 (mariadb.org binary distribution)

我已经能够在一个更简单的查询上复制该问题,我将在下面详细介绍该问题(一个简单的票证/交易表和一个客户/卡表):

表格如下所示:

-------------------
|CUSTOMER |
-------------------
|*card_number |
-------------------

-------------------
|TICKET |
-------------------
|*id |
|card_number |
|transaction_value|
-------------------

第一个查询使用常规外部联接,它返回所有销售额(包括非卡销售额)。这是我想要接收的数据,但是如果您查看返回的值,票证 ID 8 没有附加卡号(即使计数字段表明已找到)。

SELECT ticket.id,
ticket.transaction_value,
customer.card_number,
COUNT(customer.card_number)
FROM ticket
LEFT OUTER JOIN customer ON ticket.card_number = customer.card_number
WHERE DATE(ticket.timestamp) = "2014-11-09"
GROUP BY ticket.id;
<小时/>
 id, transaction_value, card_number, count
4 , 205.13 , {null} , 0
5 , 116.04 , xxx4785 , 1
6 , 74.97 , xxx0281 , 1
7 , 19.99 , xxx6836 , 1
8 , 55.98 , {null} , 1
9 , 13.59 , {null} , 0

第二个查询使用内部联接,该内部联接仅返回附加了卡片的销售,但在本例中,我们可以看到票证 8 现在具有卡号。为什么它没有出现在第一个查询中?

SELECT ticket.id,
ticket.transaction_value,
customer.card_number,
COUNT(customer.card_number)
FROM ticket
JOIN customer ON ticket.card_number = customer.card_number
WHERE DATE(ticket.timestamp) = "2014-11-09"
GROUP BY ticket.id;
<小时/>
id, transaction_value, card_number, count
5, 116.04 , xxx4785 , 1
6, 74.97 , xxx0281 , 1
7, 19.99 , xxx6836 , 1
8, 55.98 , xxx0273 , 1

最后我决定尝试使用汇总函数:在本例中我再次使用外连接,发现票 8 再次附加了卡号。我重复了 MIN 并得到了相同的结果。

 SELECT ticket.id,
ticket.transaction_value,
MAX(customer.card_number),
COUNT(customer.card_number)
FROM ticket
LEFT OUTER JOIN customer ON ticket.card_number = customer.card_number
WHERE DATE(ticket.timestamp) = "2014-11-09"
GROUP BY ticket.id;
<小时/>
 id, transaction_value, card_number, count
4 , 205.13 , {null} , 0
5 , 116.04 , xxx4785 , 1
6 , 74.97 , xxx0281 , 1
7 , 19.99 , xxx6836 , 1
8 , 55.98 , xxx0273 , 1
9 , 13.59 , {null} , 0

有人可以解释一下这里发生的事情吗?我真的希望能够解决这个问题,而不必求助于复杂的解决方案,例如多个查询或添加特殊的汇总函数等(即,在发生这种情况之前,外连接一切正常)。

最佳答案

看来我可能找到了罪魁祸首; Maria 10.x 中存在一个错误,导致使用 group by 时从外连接中省略结果:MariaDB Bug Report 。感谢 Aziz 提出了一些好的建议并帮助我。希望这可以帮助其他像我一样困惑的人!

更新:我已经测试了 MariaDB 10.0.21 并且可以确认该错误已得到修复。

关于mysql - 使用 OUTER JOIN 时缺少列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838151/

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