MySQL错误验证器似乎无法在语法中找到

时间:2019-10-28 13:07:44

标签: mysql database

我正在尝试使用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”

0 个答案:

没有答案