我正在尝试使用MySQL版本5.7.27构建一个SQL查询。
我正在尝试对同一张表进行多个左联接。在某个时候,我得到一个错误,告诉我,原始表的列是未知的。
我尝试在查询中找到语法错误,但似乎没有一个明显的错误。我尝试了一些在线SQL验证器。他们不断告诉我,我的查询有效。
在那之后,我尝试将查询分开,以找出在左联接之前我到底在使用什么,这使我的查询无法运行。这样做实际上向我显示了一个结果,其中包括错误告诉我的那一列,那是丢失的。
所以也许这不是语法错误,但是MySQL正在按照与我所知道的顺序不同的顺序验证事物,试图从实际上不存在的地方中选择“缺失”列。
更改左联接的顺序实际上可以解决问题。我真的不能那样做,寿。 SQL是由某些函数生成的。 SQL的每一个部分。一个用于“ SELECT”,一个用于“ FROM”,依此类推。因此,工作是在其他联接之前联接“ additional_agreement_fields”表的最小版本。遗憾的是,“ FROM”部分的功能是以一种非常有趣的方式编写的。因此,我最好的选择是在创建FROM的函数之后添加“ additional_agreement_fields”联接。
这种尝试在下面生成了SQL。
我收到以下错误: 错误代码:1054。“子句”中的未知列“ customers.id”
所以:
-查询的各个部分都可以独立运行
-执行至错误点为止,该表持有具有以下内容的表:
“缺少列”
-更改联接的顺序可以解决问题,但是我不能只是
这样做,我想知道为什么它不能按此顺序
-在线验证者找不到任何语法错误
-从逻辑上讲,我只是将不歧义的列添加到表中
并且不删除任何内容。仍然找不到东西
SELECT DISTINCT
(customers.id),
companies.company_name AS 'Kunde -> Firmenname',
vcpt_mail.tcom_value AS 'Kontakt -> TCom -> Email',
v_contact_people.id AS 'Kontakt -> ID',
v_contact_people.last_name AS 'Kontakt -> Nachname',
A0.value AS 'Kunde -> Zusatzvereinbarung -> TestfeldB'
FROM
customers
LEFT JOIN
customer_types ON customer_types.id =
customers.customer_type_id,
v_customer_owners,
companies
LEFT JOIN
(v_contact_people
LEFT JOIN v_cp_tcoms AS vcpt_mail ON
vcpt_mail.contact_person_id = v_contact_people.id
AND vcpt_mail.ttid = 3
AND (vcpt_mail.type_label_access_path = '/Global'
OR vcpt_mail.type_label_access_path LIKE '/Global%')) ON
v_contact_people.company_id = companies.id
AND v_contact_people.access_path LIKE '/Global%'
LEFT JOIN
(SELECT
*
FROM
additional_agreement_fields
WHERE
name = 'TestfeldB' AND value = '5') AS A0 ON customers.id
= A0.customer_id
LEFT JOIN
(SELECT
*
FROM
additional_agreement_fields
WHERE
name = 'TestfeldC' AND value = '6') AS A1 ON customers.id
= A1.customer_id
WHERE
v_customer_owners.customer_id = customers.id
AND v_customer_owners.path LIKE '/Global%'
AND customers.company_id = companies.id
AND companies.deleted_at IS NULL
AND customers.deleted_at IS NULL
AND (A0.value = '5' AND A0.name = 'TestfeldB'
OR A1.value = '6' AND A1.name = 'TestfeldC');
预期结果是其中有2个客户的不为空的表,我准备查找并找到,更改了连接顺序。
结果是带有错误代码的查询被中断。
错误代码:1054。“ on子句”中的未知列“ customers.id”