【发布时间】:2019-09-01 14:58:03
【问题描述】:
我正在尝试使用以下方法获取剩余数量的书籍
库存=总计+(收到-已发行);
Table book_qnt - 图书数量列表
id | book | qnt
=======================
1 | 1 | 20
2 | 2 | 12
Table book - 书籍列表
id | ttl
===========
1 | Social Experiment
2 | Evolution of Culture
Table book_trns - 图书交易清单
id | bk | std | iss | rcv | dte
==========================================
1 | 2 | 1 | 6 | 0 | 2019-04-11
2 | 2 | 2 | 4 | 0 | 2019-04-05
只有那些有接收和发出值的书才可以。
在DB语言中,显示book_trans.rcv和book_trans.iss不是NULL的书籍的结果
SELECT
book.id AS book,
book_qnt.qnt+((SUM(book_trans.rcv))-(SUM(book_trans.iss))) AS stock,
结果
book| stock
===========
1 | NULL
2 | 2
现在我尝试获取如下结果,如果book_trans.rcv 和book_trans.iss 是NULL,那么它应该从book_qnt 获取总计qnt
期望的结果
book| stock
===========
1 | 20 // id 1's book_trans.rcv and book_trans.iss is NULL, so it should show total qnt
2 | 2 // id 2's book_trans.rcv and book_trans.iss is not NULL, so it is calculating
我该怎么做如果book_trans.rcv 和book_trans.iss 行为Null,则赋值为0。
SELECT
book.id AS book,
book_qnt.qnt+((IFNULL(0, SUM(book_trans.rcv)))-(IFNULL(0, SUM(book_trans.iss)))) AS stock,
但结果(计算不起作用)
book| qnt
===========
1 | 20
2 | 12
完整的 MySQL
SELECT
book_qnt.qnt+((IFNULL(0, SUM(book_trans.rcv)))-(IFNULL(0, SUM(book_trans.iss)))) AS stock,
lib_bk.id,
lib_bk.ttl
FROM
book
JOIN
book_qnt ON book_qnt.book=book.id
LEFT JOIN
book_trans ON book_trans.bk=book.id
GROUP BY book.id
【问题讨论】:
-
'如果expr1不为NULL,IFNULL()返回expr1;否则返回 expr2。 - dev.mysql.com/doc/refman/8.0/en/… 0 永远不会为空。
-
@P.Salmon,在我的查询中,我能做什么而不是
IFNULL