我有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;
再一次,任何帮助将不胜感激!
答案 0 :(得分:0)
一切看起来都不错。您的查询工作正常。
您的问题来自检查您的查询是否有效。您编写了另一个您认为is_wholesale = 0
和is_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)。