SELECT * FROM 客户表 WHERE 
                     (SELECT 客户编号 FROM 订单主表 WHERE  
                                                    ( 
                                                      SELECT 订单编号
                                                      FROM 订单明细表 WHERE 
                                                      商品名称='旺旺雪饼')) GROUP BY 客户编号
上面语句,要求查询订购了“旺旺雪饼”的所有客户的信息,我的思路是,由旺旺雪饼得到订单编号,由订单编号得到客户编号,由客户编号查询客户信息为什么报错:
“在应使用条件的上下文(在 ')' 附近)中指定了非布尔类型的表达式”

解决方案 »

  1.   

    SELECT 客户编号 FROM 客户表 
    left join  订单主表  on 客户表.客户编号=订单主表.客户编号
    left join 订单明细表  on 订单主表.订单编号=订单主表.订单编号
    where 订单明细表.商品名称='旺旺雪饼'
    group by 客户编号
      

  2.   

    SELECT * FROM 客户表 WHERE 客户编号 IN 
      (SELECT 客户编号 FROM 订单主表 WHERE 订单编号 IN  
      (  
      SELECT 订单编号
      FROM 订单明细表 WHERE  
      商品名称='旺旺雪饼')) GROUP BY 客户编号
      

  3.   


    --try
    SELECT * 
    FROM 客户表 A  
    LEFT JOIN  
         订单主表 B  ON B.客户编号=A.客户编号
    LEFT JOIN  
         订单明细表 C  ON  B.订单编号=C.订单编号   
    WHERE  
         C.商品名称='旺旺雪饼'GROUP BY A.客户编号
      

  4.   


    SELECT * FROM 客户表 WHERE   --此处要指定  '客户编号 in'
      (SELECT 客户编号 FROM 订单主表 WHERE   --此处要指定'订单编号 IN'
      (  
      SELECT 订单编号
      FROM 订单明细表 WHERE  
      商品名称='旺旺雪饼')) GROUP BY 客户编号--你缺少了指定,默认指定了非布尔类型的表达式,导致查询报错
      

  5.   

    SELECT * FROM 客户表 WHERE   客户编号 IN --此处要指定  '客户编号 IN'
      (SELECT 客户编号 FROM 订单主表 WHERE 订单编号 IN  --此处要指定'订单编号 IN'
      (  
      SELECT 订单编号
      FROM 订单明细表 WHERE  
      商品名称='旺旺雪饼')) GROUP BY 客户编号
      

  6.   

    嵌套时候需要加别名,建议使用inner join。SELECT * FROM 客户表 WHERE  
      (SELECT 客户编号 FROM 订单主表 WHERE   
      (  
      SELECT 订单编号
      FROM 订单明细表 WHERE  
      商品名称='旺旺雪饼')a )b GROUP BY 客户编号
      

  7.   


    SELECT * FROM 客户表 WHERE  
      (
         SELECT 客户编号 FROM 订单主表 WHERE   
            (  
              SELECT 订单编号
              FROM 订单明细表 WHERE  
              商品名称='旺旺雪饼') AS a
        ) AS b 
    GROUP BY 客户编号
    这种嵌套查询需要使用别名,as可以省略哈
      

  8.   

    报错啊,AS有语法错误,我也没见过AS在这个地方的,只见过AS在SELECT后面的
      

  9.   

    where后面直接是括号(子查询)了。SELECT * FROM 客户表 WHERE 客户编号 in
    (SELECT 客户编号 FROM 订单主表 WHERE 订单编号 in  
      (   
      SELECT 订单编号
      FROM 订单明细表 WHERE   
      商品名称='旺旺雪饼') 
    ) GROUP BY 客户编号in后面的子查询,是不能带别名的
      

  10.   

    SELECT * FROM 客户表 WHERE  
    客户编号 in
    (SELECT 客户编号 FROM 订单主表 WHERE   
     订单编号 in (  
      SELECT 订单编号
      FROM 订单明细表 WHERE  
      商品名称='旺旺雪饼'
    )
    )
     GROUP BY 客户编号
    嵌套要这么写