数据库mysql语言的嵌套查询问题

数据库表的结构如下:
customer: custkey name comment
lineitem:orderkey partkey comment
orders:orderkey custkey
part: partkey name
请问如何用双层 exists 嵌套查询至少购买过顾客“齐光远”购买过的全部零件的顾客姓名。

select name from customer where custkey exists (select custkey from orders where orderkey exists (select custkey from customer where name = '齐光远'))

1、必须使用双层exists吗?这种方式要体现“全部零件”更为复杂:
非双层exists方式:

SELECT ( SELECT name FROM custromer c WHERE c.custkey = b.custkey ) name
  FROM ( SELECT DISTINCT o.custkey, l.partkey, count( 1 ) OVER( ) cnt
           FROM orders o JOIN lineitem l ON o.orderkey = l.orderkey AND custkey = ( SELECT custkey FROM customer WHERE name = '齐光远' ) ) a
  JOIN ( SELECT DISTINCT o.custkey, l.partkey
           FROM orders o JOIN lineitem l ON o.orderkey = l.orderkey ) ON a.partkey = b.partkey AND a.custkey != b.custkey
 GROUP BY b.custkey, a.cnt
 HAVING count( b.partkey ) = a.cnt

双层exists方式(甚至可以写成三层exists方式):


SELECT name
  FROM customer c
 WHERE EXISTS( SELECT 1
                 FROM ( SELECT o.custkey
                          FROM orders o JOIN lineitem l ON o.orderkey = l.orderkey
                         WHERE EXISTS( SELECT 1 FROM orders o0 JOIN lineitem l0 ON o0.orderkey = l0.orderkey
                                        WHERE o0.custkey = ( SELECT custkey FROM customer WHERE name = '齐光远' ) AND l0.partkey = l.partkey AND o0.custkey != o.custkey ) a
                         GROUP BY b.custkey
                         HAVING count( DISTINCT l.partkey ) = ( SELECT count( DISTINCT partkey ) FROM orders o0 JOIN lineitem l0 ON o0.orderkey = l0.orderkey
                                                                 WHERE o0.custkey = ( SELECT custkey FROM customer WHERE name = '齐光远' ) ) t
                WHERE c.custkey = t.custkey )

以上SQL纯手写,没有对应的表结构和数据进行验证,只有题主自行验证了

select
name
from customer c2
where  exists
(select
orderkey,custkey
from orders o1
where o1.custkey=c2.custkey
and exists
(select 
custkey,name
from
customer c1
where c1.name = '齐光远'
and c1.custkey=o1.custkey))