多表MySQL查询的问题

时间:2010-06-10 22:24:18

标签: mysql

我有3张桌子。以下是每个所需的相关信息。

PROD_ID
ORDER_ID
item_qty
主键是prod_id

订单

ORDER_ID
order_date的
ORDER_STATUS
ACCT_ID
primary-key是order_id key是acct_id

帐户

ACCT_ID
is_wholesale 主键是acct_id

项目通过order_id链接到订单,订单通过acct_id链接到帐户

我需要为prod_id = 464且订单统计不是5且is_wholesale为0且order_date在两个日期之间的所有项目汇总item_qty。我正在努力解决这个问题并希望得到任何帮助。这是我的,但它没有正常工作:

SELECT SUM(items.item_qty) as qty
  FROM items
LEFT JOIN orders ON orders.order_id = items.order_id
LEFT JOIN accounts on orders.acct_id = accounts.acct_id
WHERE items.prod_id =451
  AND orders.order_date >= '$from_date'
  AND orders.order_date <= '$to_date'
  AND orders.order_status <>5
  AND accounts.is_wholesale=0;

再一次,任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

一切看起来都不错。您的查询工作正常。

您的问题来自检查您的查询是否有效。您编写了另一个您认为is_wholesale = 0is_wholesale = 1

相加的查询
SELECT SUM(items.item_qty) as qty
  FROM items
LEFT JOIN orders ON orders.order_id = items.order_id
LEFT JOIN accounts on orders.acct_id = accounts.acct_id
WHERE items.prod_id =451
  AND orders.order_date >= '$from_date'
  AND orders.order_date <= '$to_date'
  AND orders.order_status <>5;

但是此查询包含错误。将LEFT JOIN更改为INNER JOIN会修复查询。正如OMG小马在评论中所指出的那样,当你的意思是INNER JOIN时写出来是一个好习惯。

答案 1 :(得分:0)

order_status可以为NULL吗?如果是这样,你需要说(order_status&lt;&gt; 5 OR order_status IS NULL)。