mysql左连接 如果有两条_mysql-为什么两个左连接在一个查询中导致错误?

在尝试扩展数据库表`regular_rules`并创建与之关联的`extended_rules`表时,遇到一个SQL查询错误。查询中包含两个左连接,一个连接`rule_coupons`,另一个连接`regular_rules`。错误信息提示`main_table.rule_id`在'ON clause'中未找到。当交换两个连接的位置时,错误依然存在。问题似乎与Magento平台有关,虽然在phpMyAdmin和mysqli中执行相同查询能够正常工作。目前,错误的原因尚不清楚,可能是由于Magento的特定实现导致。
摘要由CSDN通过智能技术生成

注意:如果您正在寻找自己的问题的解决方案并且被画在这里,它可能对您没有帮助.除非您正在分析一个SQL查询中的错误,而实际上该错误可能存在于其后的查询中(您并不知道),否则这个问题对您没有帮助.我现在只是警告您,因为此问题中提供的所有数据均未找到答案.

为了扩展数据库表regular_rules而无需修改表本身,我创建了一个附加表(extended_rules),其PK对regular_rules也是FK.然后,我可以将任何新列放在extended_rules中,然后每当我从中加载记录时,我只需要将其与regular_rules结合起来就可以将其视为完整对象.因此,如您所见,这两个表共享一对一的关系.

但是,regular_rules与另一个表(rule_coupons)也具有一对多关系,该表也需要连接.

因此,我有以下查询:

SELECT `main_table`.*, `primary_coupon`.`code`, `regular_rules`.*

FROM `extended_rules` AS `main_table`

LEFT JOIN `rule_coupons` AS `primary_coupon`

ON main_table.rule_id = primary_coupon.rule_id AND primary_coupon.is_primary = 1

LEFT JOIN `regular_rules`

ON `main_table`.`rule_id` = `regular_rules`.`rule_id`

这对我来说似乎很好.但是,我收到以下错误信息:

SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘main_table.rule_id’ in ‘on clause’

通过测试,我发现该错误在第二个联接上发生,尽管我刚刚在同一查询中不久就成功访问了main_table.rule_id.有趣的是,如果我交换两个联接,则第二个联接仍会发生错误,这使我相信这可能不是逻辑错误,而是语法错误,与我完全不了解的东西有关.

请注意,我不能随意修改第一个联接(在rule_coupons上),并且只能修改第二个联接(在regular_rules上)或向查询添加新部分.

编辑:有趣的发展…如果我将查询粘贴到phpMyAdmin并在那里执行它,它工作正常.我还整理了一个快速的基本PHP脚本,以使用mysqli执行查询,并且效果很好.到目前为止,它似乎只发生在我要构建的平台范围内(Magento).我已经与Magento一起工作了很长时间,而且之前从未遇到过像这样的奇怪数据库问题…所以我仍然不确定出什么问题,但是至少现在您有了更多的背景信息.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值