我在MYSQL数据库中有以下三个表:
CREATE TABLE `hr_leave_requests` (
`id` int(11) UNSIGNED NOT NULL,
`company_id` int(11) DEFAULT NULL,
`employee_id` bigint(20) UNSIGNED DEFAULT NULL,
`leave_type_id` int(11) UNSIGNED NOT NULL,
`leave_status` tinyint(1) DEFAULT 0 COMMENT '0=Draft,1=Pending/Awaiting Approval, 2=Cancelled,3=Rejected,4=Approved',
`no_of_days` int(10) UNSIGNED DEFAULT NULL,
`is_active` tinyint(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `hr_leave_types`
--
CREATE TABLE `hr_leave_types` (
`id` int(11) UNSIGNED NOT NULL,
`company_id` int(11) DEFAULT NULL,
`leave_type_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`no_of_days` int(11) DEFAULT NULL,
`is_active` tinyint(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- --------------------------------------------------------
--
-- Table structure for table `hr_leave_type_details`
--
CREATE TABLE `hr_leave_type_details` (
`id` int(11) NOT NULL,
`company_id` int(11) DEFAULT NULL,
`leave_type_id` int(11) NOT NULL,
`employment_type_id` int(11) NOT NULL,
`no_of_days` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `hr_leave_requests`
--
ALTER TABLE `hr_leave_requests`
ADD PRIMARY KEY (`id`);
--
-- Indexes for table `hr_leave_types`
--
ALTER TABLE `hr_leave_types`
ADD PRIMARY KEY (`id`);
--
-- Indexes for table `hr_leave_type_details`
--
ALTER TABLE `hr_leave_type_details`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `hr_leave_type_details_uniq1` (`company_id`,`leave_type_id`,`employment_type_id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `hr_leave_requests`
--
ALTER TABLE `hr_leave_requests`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT for table `hr_leave_types`
--
ALTER TABLE `hr_leave_types`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT for table `hr_leave_type_details`
--
ALTER TABLE `hr_leave_type_details`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
LeaveType:现在,我希望hr_leave_types中的所有Leave_type_name出现并通过employee_id和Leave_type_id与hr_leave_requests链接。
已授权:每位员工均有权根据leave_type_id和employment_type_id获得特定的no_of_days。因此,必须将hr_leave_type_details中的所有no_of_days显示为与所选员工的employment_type_id相关
已批准:对于休假状态为4的特定员工,hr_leave_requests中的no_of_days的总和。如果所有相关的字段都没有字段,则应分配零
可用:已授权-已批准
我在哪里运行此查询:
SELECT
lt.leave_type_name AS LeaveType,
ltd.no_of_days as Authorized,
SUM(lr.no_of_days) as Approved,
SUM(ltd.no_of_days - lr.no_of_days) as Available
FROM hr_leave_types lt
LEFT JOIN hr_leave_requests lr on lr.leave_type_id = lt.id
AND lr.leave_status = 4
AND lr.employee_id = 17
AND lr.company_id = 1
LEFT JOIN hr_leave_type_details ltd ON ltd.leave_type_id = lr.id
WHERE ltd.employment_type_id = 1
GROUP BY
lt.leave_type_name,
lt.no_of_days,
ltd.no_of_days
因为表hr_leave_requests的雇员只有一个字段,所以我得到了以下结果:
但是我需要这样的东西:
我该如何实现?
谢谢