搜索 pk 有 a AND b
search pk have a AND b
我怎样才能实现这样的目标:
"Any employee with Present AND Latein status"
我的桌子是这样的
employee
+--------+---------+
| emp_id | name |
+--------+---------+
| a001 | michael |
+--------+---------+
| a002 | john |
+--------+---------+
status
+--------+---------+
| emp_id | status |
+--------+---------+
| a001 | Present |
+--------+---------+
| a001 | Latein |
+--------+---------+
| a002 | Absence |
+--------+---------+
我认为您正在寻找 Latein 员工。如果他们迟到,他们必须在场,否则他们没有来并且缺席。
所以对你来说最好使用
SELECT emp_id FROM status WHERE status='Latein'
select e.name
from employee e
join status s on s.emp_id = e.emp_id
where s.status in ('Present', 'Latein')
group by e.emp_id, e.name
having count(*) = 2
一种方法是对来自状态的派生 table 使用内部联接:
SELECT name
FROM employee E
INNER JOIN
(
SELECT emp_Id
FROM status
WHERE status IN('Present', 'Latein')
GROUP BY emp_Id
HAVING COUNT(*) = 2
) D
ON E.emp_Id = D.emp_Id
派生的 table 将仅包括那些同时具有 Present
和 Latein
记录的员工。
对 status
table 使用条件聚合来确定哪些员工有 'Present'
和 'Latein'
。然后将此结果加入 employee
table 以获得匹配的名称。
SELECT t1.emp_id, t1.name
FROM employee t1
INNER JOIN
(
SELECT emp_id,
SUM(CASE WHEN status = 'Present' OR status = 'Latein'
THEN 1 ELSE 0 END) AS statusSum
FROM status
GROUP BY emp_id
HAVING statusSum = 2
) t2
ON t1.emp_id = t2.emp_id
我怎样才能实现这样的目标: "Any employee with Present AND Latein status"
我的桌子是这样的
employee
+--------+---------+
| emp_id | name |
+--------+---------+
| a001 | michael |
+--------+---------+
| a002 | john |
+--------+---------+
status
+--------+---------+
| emp_id | status |
+--------+---------+
| a001 | Present |
+--------+---------+
| a001 | Latein |
+--------+---------+
| a002 | Absence |
+--------+---------+
我认为您正在寻找 Latein 员工。如果他们迟到,他们必须在场,否则他们没有来并且缺席。 所以对你来说最好使用
SELECT emp_id FROM status WHERE status='Latein'
select e.name
from employee e
join status s on s.emp_id = e.emp_id
where s.status in ('Present', 'Latein')
group by e.emp_id, e.name
having count(*) = 2
一种方法是对来自状态的派生 table 使用内部联接:
SELECT name
FROM employee E
INNER JOIN
(
SELECT emp_Id
FROM status
WHERE status IN('Present', 'Latein')
GROUP BY emp_Id
HAVING COUNT(*) = 2
) D
ON E.emp_Id = D.emp_Id
派生的 table 将仅包括那些同时具有 Present
和 Latein
记录的员工。
对 status
table 使用条件聚合来确定哪些员工有 'Present'
和 'Latein'
。然后将此结果加入 employee
table 以获得匹配的名称。
SELECT t1.emp_id, t1.name
FROM employee t1
INNER JOIN
(
SELECT emp_id,
SUM(CASE WHEN status = 'Present' OR status = 'Latein'
THEN 1 ELSE 0 END) AS statusSum
FROM status
GROUP BY emp_id
HAVING statusSum = 2
) t2
ON t1.emp_id = t2.emp_id