肯定是用户错误 - 基础数据或MySQL没有任何问题。
我在WHERE子句中尝试做的是从所有批次(包含在material_batch_track中)中选择所有material_batch_id&SUM数量,其中stocktakes_items中当前没有相应的条目或,是给定material_batch_id的stocktakes_items中的一个或多个条目但是它已被检查并已计为0,因此不需要再次检查
尽管3个办公桌上碰到了我的头,但查询仍然没有完全符合我的要求,而且我有理由相信问题出在我WHERE子句后半部分的结构上。
我还没有包含所有基础数据结构,因为我99%确信这是一个查询结构问题,但如果有人认为不是这样,请告诉我,我会更新我的问题。
房子里有天才能看到我出错的地方吗?
SELECT mb.material_batch_id AS mbid, SUM( mbt.qty ) AS expected_qty
FROM materials_batch AS mb
LEFT JOIN materials_batch_track mbt ON mbt.mbid = mb.material_batch_id
LEFT JOIN stocktakes_items sti ON sti.mbid = mb.material_batch_id
LEFT JOIN stocktakes st ON st.stid = sti.stid
WHERE mb.material_id =2
AND mb.batch_status
IN (
'Arrived', 'Completed'
)
AND mb.batch_type = 'whole'
AND sti_id IS NULL
OR (
qty_recorded !=0
AND qty_expected !=0
)
AND st.status NOT
IN (
'Cancelled', 'In Progress'
)
GROUP BY mbid
查询只返回没有结果,这是不正确的。我认为围绕...... AND sti_id IS NULL OR ( )
'
(在我看来)问题区域的表结构是:
mysql> SELECT * FROM stocktakes_items;
+--------+------+------+--------------+--------------+
| sti_id | stid | mbid | qty_expected | qty_recorded |
+--------+------+------+--------------+--------------+
| 1 | 1 | 1 | 0 | 0 |
| 2 | 1 | 3 | 1 | 0 |
| 3 | 1 | 9 | 4 | 0 |
| 4 | 1 | 13 | 3 | 0 |
+--------+------+------+--------------+--------------+
4 rows in set (0.00 sec)
提前谢谢大家。