0

我看不到任何错误,但谁知道。

此查询有效:

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 where F.id_mat_bauteil = Z.id_mat_bauteil)”附近使用正确的语法

4

1 回答 1

0

您似乎为用于 EXISTS 子句的子选择提供了一个别名,这不是必需的,然后使用了另一个 WHERE 子句(即,您的 *select distinct id_mat_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_bestueckungslinien* 匹配

于 2013-06-12T13:21:43.463 回答