我看不到任何错误,但谁知道。
此查询有效:
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”附近使用正确的语法
答案 0 :(得分: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 *匹配*