【发布时间】:2020-06-01 07:00:55
【问题描述】:
我尝试了多种方法在选择时将 NULL 转换为数字 0:
SELECT
ss.id AS staff_id,
u.realname AS realname,
ss.amount AS salary_amount,
IF(s.paid_amount IS NOT NULL, s.paid_amount,0.00) AS paid_amount,
(ss.amount-s.paid_amount)
FROM f_salary_staff ss
JOIN user u ON (u.id=ss.user_id)
LEFT JOIN (
SELECT staff_id,
month_year,
SUM(amount) AS paid_amount
FROM f_salary
WHERE month_year='2020-02-29'
GROUP BY staff_id,month_year
) s ON (ss.id=s.staff_id)
我使用了 IFNULL 但这根本不会将 0 转换为任何数字,因此选择甚至没有列出具有 NULL 值的那些。有没有办法在选择时将 NULL 值转换为数值并与其他列进行数值比较?
顺便说一句 .. 下面是两个表的创建表语句。
f_salary_staff
CREATE TABLE `f_salary_staff` ( `id` int(11) NOT NULL AUTO_INCREMENT, `store_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `date_enter` date DEFAULT NULL, `amount` decimal(12,2) DEFAULT NULL, `updated` datetime DEFAULT NULL, `updated_by` int(11) DEFAULT NULL, `created` datetime DEFAULT NULL, `created_by` int(11) DEFAULT NULL, `last_activated` datetime DEFAULT NULL, `last_inactivated` datetime DEFAULT NULL, `status` varchar(16) DEFAULT NULL, PRIMARY KEY (`id`), KEY `store_id` (`store_id`), KEY `user_id` (`user_id`), CONSTRAINT `f_salary_staff_ibfk_1` FOREIGN KEY (`store_id`) REFERENCES `store` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `f_salary_staff_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE )
然后是 f_salary
CREATE TABLE `f_salary` ( `id` int(11) NOT NULL AUTO_INCREMENT, `staff_id` int(11) NOT NULL, `amount` decimal(12,2) DEFAULT NULL, `note` tinytext, `ref_date` date DEFAULT NULL, `month_year` date DEFAULT NULL, `created` datetime DEFAULT NULL, `created_by` int(11) DEFAULT NULL, `updated` datetime DEFAULT NULL, `updated_by` int(11) DEFAULT NULL, `approved` datetime DEFAULT NULL, `approved_by` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `staff_id` (`staff_id`), CONSTRAINT `f_salary_ibfk_1` FOREIGN KEY (`staff_id`) REFERENCES `f_salary_staff` (`id`) ON DELETE CASCADE ON UPDATE CASCADE )
希望对需要了解表结构的人有所帮助
【问题讨论】:
-
我不明白您的查询,“WHERE s.amount > ss.amount”无法正常工作,因为 s.amount 根本不存在
-
抱歉 .. 应该是 s.paid_amount ... 我该如何编辑问题?
-
我不懂你的表。我的假设:有一个
user表,它的主键是user_id。有一个staff表,它的pk 是staff_id。但是:这两者有什么关系?user表是否有staff_id以便每个用户都属于一个员工?表f_salary有一个staff_id而不是user_id,所以工资是在员工身上而不是在用户身上?那个员工中的每个用户都得到这个薪水,还是他们自己分配?然后表f_salary_staff有一个user_id,名字暗示它应该有一个staff_id... -
... 请解释一下您的表格。它们代表什么?他们的钥匙是什么?
-
您好 .. 我已经把 create table 语句供参考 .. 希望对您有所帮助
标签: mysql null comparison numeric ifnull