SQL - JOIN 子句中的 FILTER 条件
SQL - FILTER condition in JOIN clause
我正在向一个已经存在的 TableA
中插入数据,下面的查询是存储过程的一部分。这部分查询将值插入到 TableA
的某些列中。存储过程非常冗长,其中有几个插入语句来填写 TableA
.
中的不同列
INSERT INTO TableA (ID, Event, Date, Amount, Status_, Country)
(SELECT DISTINCT ID, Event, Date, Amount, c.Status, b.Country
FROM TableA1 a
JOIN TableB1 b ON b.employeeID = a.ID
JOIN TableC1 c ON c.Status = ‘Active’)
通常,连接条件由两列组成,例如(a.Status_ = c.Status)
。但是在这里,它被替换为过滤条件 (JOIN TableC1 c ON c.Status = ‘Active’)
.
单独的 select 查询执行得很好并且 returns 结果。我正在尝试了解此过滤条件所产生的影响。
你能解释一下吗?
谢谢
和这个一样...
SELECT DISTINCT
ID, Event, Date, Amount, c.Status, b.Country
FROM
(
TableA1 a
INNER JOIN
TableB1 b
ON b.employeeID = a.ID
)
CROSS JOIN
(
SELECT * FROM TableC1 WHERE Status = 'Active'
)
c
实际上,INNER JOIN
被解析,然后 每个 行被连接到 行来自TableC1 WHERE Status = 'Active'
例如
表A1
ID
Event
Date
Amount
1
e1
2022-01-01
11
2
e2
2022-02-02
22
表B1
EmployeeID
Country
1
c1
2
c2
表C1
some_id
Status
1
Sleeping
2
Active
3
Active
4
Sleeping
会产生...
ID
Event
Date
Amount
Country
Status
(some_id, added by me)
1
e1
2022-01-01
11
c1
Active
2
1
e1
2022-01-01
11
c1
Active
3
2
e2
2022-02-02
22
c2
Active
2
2
e2
2022-02-02
22
c2
Active
3
你可能应该...
INNER JOIN
TableC1 c
ON c.some_id = b.some_other_id
AND c.Status = 'Active'
我正在向一个已经存在的 TableA
中插入数据,下面的查询是存储过程的一部分。这部分查询将值插入到 TableA
的某些列中。存储过程非常冗长,其中有几个插入语句来填写 TableA
.
INSERT INTO TableA (ID, Event, Date, Amount, Status_, Country)
(SELECT DISTINCT ID, Event, Date, Amount, c.Status, b.Country
FROM TableA1 a
JOIN TableB1 b ON b.employeeID = a.ID
JOIN TableC1 c ON c.Status = ‘Active’)
通常,连接条件由两列组成,例如(a.Status_ = c.Status)
。但是在这里,它被替换为过滤条件 (JOIN TableC1 c ON c.Status = ‘Active’)
.
单独的 select 查询执行得很好并且 returns 结果。我正在尝试了解此过滤条件所产生的影响。
你能解释一下吗?
谢谢
和这个一样...
SELECT DISTINCT
ID, Event, Date, Amount, c.Status, b.Country
FROM
(
TableA1 a
INNER JOIN
TableB1 b
ON b.employeeID = a.ID
)
CROSS JOIN
(
SELECT * FROM TableC1 WHERE Status = 'Active'
)
c
实际上,INNER JOIN
被解析,然后 每个 行被连接到 行来自TableC1 WHERE Status = 'Active'
例如
表A1
ID | Event | Date | Amount |
---|---|---|---|
1 | e1 | 2022-01-01 | 11 |
2 | e2 | 2022-02-02 | 22 |
表B1
EmployeeID | Country |
---|---|
1 | c1 |
2 | c2 |
表C1
some_id | Status |
---|---|
1 | Sleeping |
2 | Active |
3 | Active |
4 | Sleeping |
会产生...
ID | Event | Date | Amount | Country | Status | (some_id, added by me) |
---|---|---|---|---|---|---|
1 | e1 | 2022-01-01 | 11 | c1 | Active | 2 |
1 | e1 | 2022-01-01 | 11 | c1 | Active | 3 |
2 | e2 | 2022-02-02 | 22 | c2 | Active | 2 |
2 | e2 | 2022-02-02 | 22 | c2 | Active | 3 |
你可能应该...
INNER JOIN
TableC1 c
ON c.some_id = b.some_other_id
AND c.Status = 'Active'