Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用逗号组合左连接_Mysql_Sql_Join - Fatal编程技术网

Mysql 用逗号组合左连接

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

所以我得到了以下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 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年,
联接语法被认可;它更清晰,而且实际上有效……。你为什么要这样做“别无选择"? 只要使用适当的连接,一切都很好。您永远不应该混合隐式连接和显式连接-您所犯的错误只是其中一个原因。您必须解决的唯一选择是在逗号分隔的项之前使用正确的joinsPlicit
join
链,这就是为什么不能在ON子句中使用p1的列。
internal join
join
在MySQL中的意思完全相同。@Fobujasa
internaljoin
JOIN
几乎在任何数据库中都是同义词。