Mysql 用逗号组合左连接
所以我得到了以下SQL代码:Mysql 用逗号组合左连接,mysql,sql,join,Mysql,Sql,Join,所以我得到了以下SQL代码: SELECT * FROM A a1, AP ap1, P p1, M m1 LEFT JOIN F f1 ON f1.id_f = p1.f1 LEFT JOIN C c1 ON p1.c_id = c1.c_id LEFT JOIN S s1 on p1.saison_id = s1.s_id WHERE a1.a_type NOT IN (1) AND a1.type_c IN (1,2) AND ap1.a_id = a1.achats_id AND
SELECT *
FROM A a1, AP ap1, P p1, M m1
LEFT JOIN F f1 ON f1.id_f = p1.f1
LEFT JOIN C c1 ON p1.c_id = c1.c_id
LEFT JOIN S s1 on p1.saison_id = s1.s_id
WHERE a1.a_type NOT IN (1)
AND a1.type_c IN (1,2)
AND ap1.a_id = a1.achats_id
AND p1.p_id = ap1.products_id
AND p1.m_id = m1.m_id
ORDER BY a_id ASC
我得到了这个错误:
#1054 - Unknown column 'p1.f1' in 'on clause'
所以我不知道为什么它不能识别3号线上的p1.f1。有什么想法吗?您只需使用适当的
连接
或内部连接
语法:
SELECT *
FROM A a1 JOIN
AP ap1
ON ap1.a_id = a1.achats_id JOIN
P p1
ON p1.p_id = ap1.products_id JOIN
M m1
ON p1.m_id = m1.m_id LEFT JOIN
F f1
ON f1.id_f = p1.f1 LEFT JOIN
C c1
ON p1.c_id = c1.c_id LEFT JOIN
S s1
ON p1.saison_id = s1.s_id
WHERE a1.a_type NOT IN (1) AND a1.type_c IN (1, 2)
ORDER BY a1.a_id ASC;
瞧!问题已解决。不要将
左连接
与逗号组合。切勿在FROM
子句中使用逗号。始终使用正确、明确的JOIN
语法。@GordonLinoff为什么?如果我没有选择(因为X或Y的原因),我怎么能同时使用这两种语法呢?为什么不在其中一种上混合使用这两种语法???只需使用内部联接
而不是,
。。。混合语法导致难以阅读的模棱两可的代码;a,b左连接c,d的优先顺序是什么?如果你真的必须使用,
,那么就要学会使用子查询和/或(+)
符号来将,
转换为外部联接(但要注意,即使这样,某些逻辑也无法准确表达,这就是为什么在1992年,联接语法被认可;它更清晰,而且实际上有效……。你为什么要这样做“别无选择"? 只要使用适当的连接,一切都很好。您永远不应该混合隐式连接和显式连接-您所犯的错误只是其中一个原因。您必须解决的唯一选择是在逗号分隔的项之前使用正确的joinsPlicitjoin
链,这就是为什么不能在ON子句中使用p1的列。internal join
和join
在MySQL中的意思完全相同。@Fobujasainternaljoin
和JOIN
几乎在任何数据库中都是同义词。