假设我有两个表
机台
| id | ip_address|
|-------|-----------|
| 1 |1.1.1.1 |
| 2 |1.1.1.2 |
| 3 |1.1.1.3 |
| 4 |1.1.1.4 |
时间表表
| id | machine_id| reserved_date|user_id|
|-------|-----------|--------------|-------|
| 1 | 1 | 2019-10-31 | 1 |
| 2 | 2 | 2019-10-10 | 2 |
| 3 | 3 | 2019-10-31 | 4 |
当前,我所拥有的查询仅返回满足where子句的数据(这是所期望的),但我需要的是能够从计算机表中获取所有计算机,包括计划中的user_id满足where子句的表。
SELECT machine.ip_address, schedule.user_id FROM machine
INNER JOIN schedule ON schedule.machine_id = machines_machine.id
WHERE schedule.reserved_date = '2019-10-31';
预期结果:
| ip_address | user_id |
|------------|---------|
| 1.1.1.1 | 1 |
| 1.1.1.2 | |
| 1.1.1.3 | 4 |
| 1.1.1.4 | |
我需要从计算机表中返回所有计算机,外加一列,其中仅包含满足指定日期的预订的user_id。
答案 0 :(得分:1)
SELECT machine. ip_address, schedule. user_id
FROM machine
LEFT JOIN schedule
ON schedule. machine_id = machine. machine_id
WHERE schedule. reserved_date='2019-10-31';
答案 1 :(得分:0)
左联接表,将关于左联接表列的WHERE
条件移动到ON
。
WITH Machines(id, ip_address) as (
values
(1, '1.1.1.1')
,(2, '1.1.1.2')
,(3, '1.1.1.3')
,(4, '1.1.1.4')
),Schedule(id, machine_id, reserved_date, user_id) as (
values
(1, 1, '2019-10-31', 1)
,(2, 2, '2019-10-10', 2)
,(3, 3, '2019-10-31', 4)
)
SELECT machines.ip_address, schedule.user_id
FROM machines
LEFT JOIN schedule ON schedule.machine_id = machines.id
AND schedule.reserved_date = '2019-10-31';
答案 2 :(得分:0)
使用innerjoin的左连接instade
SELECT machine.ip_address, schedule.user_id FROM machine
LEFT JOIN schedule ON schedule.machine_id = machines_machine.id
WHERE schedule.reserved_date = '2019-10-31';