使用子查询和连接

时间:2013-06-09 04:23:22

标签: sql sql-server sql-server-2008

查询以显示经常拍摄的图书的图书代码,出版物,价格和供应商名称。

上面的问题我使用了这个查询,但它返回错误。

select b1.book_code,b2.publication,b2.price,b3.supplier_name 
from BOOK_ISSUE b1 
join BOOK_DETAILS b2 on b1.BOOK_CODE=b2.BOOK_CODE 
join SUPPLIERS_DETAILS b3 on b2.SUPPLIER_ID=b3.SUPPLIER_ID 
group by b1.BOOK_CODE 
having COUNT(b1.book_code)>1

查询说明是: table1:book_issue table2:book_details table3:supplieer_details

以上查询目的是要显示经常拍摄的书籍。我试过但有一些。

如何更正sql语句?

2 个答案:

答案 0 :(得分:0)

我无法根据问题确切地说出来,但它可以很简单:

select b1.book_code,b2.publication,b2.price,b3.supplier_name 
from BOOK_ISSUE b1 
join BOOK_DETAILS b2 on b1.BOOK_CODE=b2.BOOK_CODE 
join SUPPLIERS_DETAILS b3 on b2.SUPPLIER_ID=b3.SUPPLIER_ID 
group by b1.book_code,b2.publication,b2.price,b3.supplier_name
having COUNT(*)>1

答案 1 :(得分:0)

问题是你不能在没有聚合函数的情况下使用不属于SELECT的{​​{1}}子句中的列,因为RDMBS无法告诉你组中的哪一行意思是选择。

根据您的预期结果,有几种方法可以处理它:

  1. GROUP BY子句
  2. 中包含列
  3. 使用汇总函数GROUP BYMIN() ...
  4. 使用子查询返回分组结果集,然后使用其他表格MAX()返回
  5. 如果没有看到表格结构,样本数据和所需的输出,很难说,但你可以尝试

    JOIN