数据库结构如下
>
> product 表
> -----------------------------------------------------------------
> productid 商品编号 int
> productname 商品名称 varchar 50
>
> sale 表
> --------------------------------------------------------------------
> saleid 报价记录编号 int
> productid 报价商品编号(与product表关联)int
> seller 报价商店名称 varchar 50 
> price 价格 float
>
选出 商品编号,名称 ,最高和最低报价,最高和最低报价商店名称,进行列表
Select    a.productid    As [商品编号],
        a.productname As [商品名称],
        b.price        As [最低价格],
        b.seller    As [最低价格店名],
        c.price        As [最高价格],
        c.seller    As [最高价格店名]
    From product As a
        Left Outer Join sale As b 
                        On b.productid=a.productid 
                           And 
                           b.price=(
                                    Select Min(price)  
                                    From  sale 
                                    Where productid=b.productid  --这个时候表b还没有创建完整,他现在内部都有哪些列?  现在的b到底是个什么样子呢?
                                   )
        Left Outer Join sale As c   
                        On c.productid=a.productid 
                           And 
                           c.price=(
                                    Select Max(price) 
                                    From  sale 
                                    Where productid=c.productid
                                   )

解决方案 »

  1.   

    b就是sale.怎么说是没创建完整?
      

  2.   

    Select    a.productid    As [商品编号],  --as后面是给查询结果取个列名
            a.productname As [商品名称],
            b.price        As [最低价格],
            b.seller    As [最低价格店名],
            c.price        As [最高价格],
            c.seller    As [最高价格店名]
        From product As a
            Left Outer Join sale As b   --product与sale左外连接,给sale取别名b
                            On b.productid=a.productid --连接条件
                               And 
                               b.price=(
                                        Select Min(price)  
                                        From  sale 
                                        Where productid=b.productid  --这个时候表b还没有创建完整,他现在内部都有哪些列?  现在的b到底是个什么样子呢?
                                       )  
            Left Outer Join sale As c   --在与sale左外连接,给sale取别名c
                            On c.productid=a.productid 
                               And 
                               c.price=(
                                        Select Max(price) 
                                        From  sale 
                                        Where productid=c.productid
                                       )
      

  3.   

    给sale取别名b
    也就是说b就是sale,b和sale的结构数据是完全相同的。
      

  4.   

    SQL语句不是我自己写的 是别人写的  对不对?
      

  5.   

    嗯  那么 这句Select Min(price)  From  sale  Where productid=b.productid不久等同于Select Min(price)  From  sale了  他为什么还写个
    Where productid=b.productid的判断条件啊?
      

  6.   

      b.price=(
                                        Select Min(price)  
                                        From  sale 
                                        Where productid=b.productid  --这个时候表b还没有创建完整,他现在内部都有哪些列?  现在的b到底是个什么样子呢?
                                       )是这样的,当为表取一个别名后,也就会把当成另外一张表。productid=b.productid  第一个是sale表的,后面一个是
    sale的。求最小值的时候,当然两个表的productid要相同,否则的话就是求整各表的最小值了。
      

  7.   

     这句Select Min(price)  From  sale  Where productid=b.productid不就等同于Select Min(price)  From  sale了  他为什么还写个 
    Where productid=b.productid的判断条件啊? 
    原因是如果不这么写,就不会得到product 表中对应的商品名称了就会不符合查询条件。