MYSQL 检查所有表 1 条目是否有表 2 条目

标签 mysql sql

我有两个表“员工”和“证书”。现在我有 4 个证书,我想检查每个员工哪些证书通过了,哪些没有通过。

Select Distinct(certificate.certificatename)
FROM `employeemanagement$certificate` certificate
Where certificatename = '**********' 
or certificatename = '************'
or certificatename = '************'
or certificatename = '************'

这会给我我想要的 4 个证书

SELECT employees.employeeid, employees.employeename, certificate.certificatename, certificate.expirationdate, certificate.`status`
FROM `employeemanagement$employees` employees 
LEFT JOIN `employeemanagement$certificate_employees` certifcate_employees on employees.id = certifcate_employees.`employeemanagement$employeesid`
LEFT JOIN `employeemanagement$certificate` certificate on certificate.id = certifcate_employees.`employeemanagement$certificateid`
Where employees.currentstatus = 'Active'

这为我提供了所有员工通过的所有证书,但它不会为我提供每个证书的结果

最佳答案

我认为条件聚合是一种合理的方法:

SELECT e.employeeid, e.employeename, 
       MAX(CASE WHEN c.certificatename = 'C1' THEN  c.expirationdate END) as c1_expiration,
       MAX(CASE WHEN c.certificatename = 'C1' THEN  c.staus END) as c1_status, 
       MAX(CASE WHEN c.certificatename = 'C2' THEN  c.expirationdate END) as c2_expiration,
       MAX(CASE WHEN c.certificatename = 'C2' THEN  c.staus END) as c2_status, 
       MAX(CASE WHEN c.certificatename = 'C3' THEN  c.expirationdate END) as c3_expiration,
       MAX(CASE WHEN c.certificatename = 'C3' THEN  c.staus END) as c3_status, 
       MAX(CASE WHEN c.certificatename = 'C4' THEN  c.expirationdate END) as c4_expiration,
       MAX(CASE WHEN c.certificatename = 'C4' THEN  c.staus END) as c4_status
FROM `employeemanagement$employees` e LEFT JOIN 
     `employeemanagement$certificate_employees` ce
      ON e.id = ce.`employeemanagement$employeesid` LEFT JOIN
     `employeemanagement$certificate` c
     ON c.id = ce.`employeemanagement$certificateid`
WHERE e.currentstatus = 'Active'
GROUP BY e.employeeid;

您可能会发现使用每个员工一行并在该行上汇总所有证书比使用每个证书使用多个行更容易。

关于MYSQL 检查所有表 1 条目是否有表 2 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518025/

相关文章:

SQL Server json 被截断(即使使用 NVARCHAR(max) 时也是如此)

php - 显示 MySQL 数据库的结果数

如果只有所有功能,mysql连接结果

mysql - BIGINT UNSIGNED VALUE 超出范围 Mysql

mysql - 执行触发 SqlFiddle 上的存储过程。 mysql

SQL - 纬度/经度距离查询 - 如果距离 = 0,则不返回任何内容

python - sqlite3 : create function regexp with python

mysql存在数据添加额外的小数字段以供自动添加

MySQL 查询将一个值设置为 1,将所有其他值设置为 0

php - 使用加入来显示轨道列表的轨道