MySQL子查询语法错误

MySQL子查询语法错误,mysql,subquery,Mysql,Subquery,我看不出有什么错误,但谁知道呢 此查询可用于: select distinct id_mat_bauteil from material_bestueckungslinien E where exists( select id_mat_bauteil from( select id_mat_bestueckungslinie from (

我看不出有什么错误,但谁知道呢

此查询可用于:

select distinct id_mat_bauteil from material_bestueckungslinien E where exists(
                    select id_mat_bauteil from(
                                select id_mat_bestueckungslinie from (
                                    select id_mat_bestueckungslinie, id_material from material_musterbestueckungen A
                                    union all
                                    select id_mat_bestueckungslinie, id_material from material_sonderbestueckungen B) C
                                where C.id_material = 10154) D
                    where D.id_mat_bestueckungslinie = E.id_mat_bestueckungslinie)
但如果我用另一个子查询扩展此查询,则会出现错误:

Select * from  material_bauteile Z
    where exists (
        select distinct id_mat_bauteil from material_bestueckungslinien E where exists(
                select id_mat_bauteil from(
                            select id_mat_bestueckungslinie from (
                                select id_mat_bestueckungslinie, id_material from material_musterbestueckungen A
                                union all
                                select id_mat_bestueckungslinie, id_material from material_sonderbestueckungen B) C
                            where C.id_material = 10154) D
                where D.id_mat_bestueckungslinie = E.id_mat_bestueckungslinie) F
        where F.id_mat_bauteil = Z.id_mat_bauteil)
错误:

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第10行“F其中F.id_mat_bauteil=Z.id_mat_bauteil)”附近要使用的正确语法


您似乎为用于EXISTS子句的子选择提供了一个不需要的别名,然后使用了另一个WHERE子句(即,您的*select distinct id\u mat\u bauteil*有2个WHERE子句)

此外,还可以从不返回此字段的子选择中选择id_mat_bauteil。但是,该问题适用于您的旧声明和更新的声明

玩一玩我认为你想做的事情,像下面这样的事情可能会更有效率:-

SELECT DISTINCT z.* 
FROM  material_bauteile Z   
INNER JOIN material_bestueckungslinien E 
ON Z.id_mat_bauteil = E.id_mat_bauteil
INNER JOIN (SELECT id_mat_bauteil FROM material_musterbestueckungen WHERE id_material = 10154
            UNION 
            SELECT id_mat_bauteil FROM material_sonderbestueckungen WHERE id_material = 10154) C
ON E.id_mat_bauteil = C.id_mat_bauteil

注意,这是假设字段id_mat_bauteil位于*material_musterbestueckungen*和*material_sonderbestueckungen*上,并与*material_bestueckungslinen*匹配

将最后两行替换为
,其中D.id_mat_bestueckungslinie=E.id_mat_bestueckungslinie)和id_mat_bauteil=Z.id_mat bauteil