【发布时间】:2011-09-12 01:59:21
【问题描述】:
注意:如果您正在为自己的问题寻找解决方案并且被吸引到这里,那么它可能对您没有帮助。除非您正在分析该错误的一个 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]:找不到列:1054 'on 子句'中的未知列 'main_table.rule_id'
通过测试,我发现这个错误发生在第二次连接时,尽管我在同一个查询中刚刚成功访问了main_table.rule_id。有趣的是,如果我交换两个连接,错误仍然发生在第二个连接上,这让我相信它可能不是逻辑错误,而是语法错误,与我根本不理解的东西有关。
请注意,我没有修改第一个连接(到rule_coupons)的奢侈,我只能修改第二个连接(到regular_rules)或向查询添加新部分。
编辑: 有趣的开发...如果我将查询粘贴到 phpMyAdmin 并在那里执行,它工作正常。我还拼凑了一个快速、基本的 PHP 脚本来使用 mysqli 执行查询,效果很好。到目前为止,它似乎只发生在我正在构建的平台范围内 (Magento)。我与 Magento 合作了很长时间,以前从未遇到过像这样奇怪的数据库问题......所以我仍然不确定出了什么问题,但至少现在你有了更多的上下文。
【问题讨论】:
标签: mysql magento join left-join