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'