sql查询以显示尚未订购/显示在发票上的产品

时间:2018-10-04 20:18:52

标签: mysql sql

Tables joined我有一个作业问题,我遇到了麻烦。我被要求查询我们数据库中从未出售过的产品总数。  TABLES

它应该看起来像这样:

+--------------------------------------------+
| number of products that have not been sold |
+--------------------------------------------+
|                                        228 |
+--------------------------------------------+

我不断得到这个:

+--------------------------------------------+
| number of products that have not been sold |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+

我的查询是:

SELECT count(*) AS 'number of products that have not been sold'  
FROM orderdetail  
JOIN invoice on invoice.invoiceid=orderdetail.invoiceid  
WHERE productid is null;

2 个答案:

答案 0 :(得分:2)

  • 由于您要考虑所有产品,因此product表必须是加入中的起始表。
  • 执行左联接,而不是内部联接。否则,内部联接将消除没有匹配的“订单”行的所有产品。
  • 使用orderDetail加入ProductID
  • 要计算所有无订单的产品,请使用COUNT()函数

尝试以下操作:

SELECT count(p.ProductID) AS 'number of products that have not been sold'  
FROM product AS p   
LEFT JOIN orderDetail AS od ON od.ProductID = p.ProductID  
WHERE od.productid IS NULL

答案 1 :(得分:0)

您可以尝试以下方法:在产品上使用leftjoin而不是orderdetail:

def printType[T](input: String)(implicit tag: TypeTag[T]): Option[T] = {
  val t = typeOf[T]
  println(s"$t")
  ...
}

def foo: Int = {
  printType[Int]("something") // prints Int
}

def bar: Int = {
  printType("something")  // prints Nothing
}