SQL 使用左外连接或右外连接查询
SQL Query by using left or right outer join
我将 table 命名为 "Employee" 并带有相应的列(id、employee_id 和状态)。如果状态在 "pending" 中,则采用 "employee_id" 的待定状态并查找 employee_id 列的其他记录。所以 employee_id 存在然后我必须取 id 值并存储到 result_id.
id employee_id status
1 1000 failed
2 1001 failed
3 1002 failed
4 1005 failed
5 1006 failed
6 1005 pending
7 1004 pending
8 1001 pending
9 1002 pending
10 1006 pending
示例:id=6,employee_id=1005 和 status='pending' 那么 result_id 应该是 4(即 result_id=4)
输出:
id result_id
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL
6 4
7 NULL
8 2
9 3
10 5
我试过:
select e.id as id ,e2.id as result_id
from employee as e, employee as e2
where e.employee_id=e2.employee_id and e.id not in (e2.id)
此查询将 return 只有 result_id
的值,但我也想要 Null 值。
谁能帮我解决这个问题?
检查这个:
架构(MySQL v5.7)
CREATE TABLE t (
`id` INTEGER,
`employee_id` INTEGER,
`status` VARCHAR(12)
);
INSERT INTO t
(`id`, `employee_id`, `status`)
VALUES
('1', '1000', 'failed'),
('2', '1001', 'failed'),
('3', '1002', 'failed'),
('4', '1005', 'failed'),
('5', '1006', 'failed'),
('6', '1005', 'pending<br/>'),
('7', '1004', 'pending<br/>'),
('8', '1001', 'pending<br/>'),
('9', '1002', 'pending<br/>'),
('10', '1006', 'pending<br/>');
查询#1
select id, null x from t where status = 'failed'
union all
select t.id, t2.id from t
left join t t2
on t.employee_id = t2.employee_id and t2.status = 'failed'
where t.status != 'failed';
| id | x |
| --- | --- |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 8 | 2 |
| 9 | 3 |
| 6 | 4 |
| 10 | 5 |
| 7 | |
我将 table 命名为 "Employee" 并带有相应的列(id、employee_id 和状态)。如果状态在 "pending" 中,则采用 "employee_id" 的待定状态并查找 employee_id 列的其他记录。所以 employee_id 存在然后我必须取 id 值并存储到 result_id.
id employee_id status
1 1000 failed
2 1001 failed
3 1002 failed
4 1005 failed
5 1006 failed
6 1005 pending
7 1004 pending
8 1001 pending
9 1002 pending
10 1006 pending
示例:id=6,employee_id=1005 和 status='pending' 那么 result_id 应该是 4(即 result_id=4)
输出:
id result_id
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL
6 4
7 NULL
8 2
9 3
10 5
我试过:
select e.id as id ,e2.id as result_id
from employee as e, employee as e2
where e.employee_id=e2.employee_id and e.id not in (e2.id)
此查询将 return 只有 result_id
的值,但我也想要 Null 值。
谁能帮我解决这个问题?
检查这个:
架构(MySQL v5.7)
CREATE TABLE t (
`id` INTEGER,
`employee_id` INTEGER,
`status` VARCHAR(12)
);
INSERT INTO t
(`id`, `employee_id`, `status`)
VALUES
('1', '1000', 'failed'),
('2', '1001', 'failed'),
('3', '1002', 'failed'),
('4', '1005', 'failed'),
('5', '1006', 'failed'),
('6', '1005', 'pending<br/>'),
('7', '1004', 'pending<br/>'),
('8', '1001', 'pending<br/>'),
('9', '1002', 'pending<br/>'),
('10', '1006', 'pending<br/>');
查询#1
select id, null x from t where status = 'failed'
union all
select t.id, t2.id from t
left join t t2
on t.employee_id = t2.employee_id and t2.status = 'failed'
where t.status != 'failed';
| id | x |
| --- | --- |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 8 | 2 |
| 9 | 3 |
| 6 | 4 |
| 10 | 5 |
| 7 | |