gpt4 book ai didi

sql - SQL 连接中的附加条件

转载 作者:行者123 更新时间:2023-11-29 12:33:41 25 4
gpt4 key购买 nike

假设我们在 SQL 数据库中有两个表(我使用 PostgreSQL 以防答案取决于数据库):

CREATE TABLE testA
(
id integer,
checked boolean
)

CREATE TABLE testB
(
id integer,
testA_id integer
)

我想从 testBtestA 中进行选择,并获得所有 checked 的结果。有两种方式:

SELECT tA.*, tB.*
FROM testB AS tB
JOIN testA AS tA
ON (tA.id = tB.testA_id AND tA.checked)

SELECT tA.*, tB.*
FROM testB AS tB
JOIN testA AS tA
ON tA.id = tB.testA_id
WHERE
tA.checked

首选哪种方式?是否存在性能差异?

最佳答案

嗯,WHERE 子句过滤结果。 ON 只是定义了表格连接在一起的方式。在您的示例中,不会有任何区别。

但请看以下内容:

CREATE TABLE testA
(
id integer,
checked boolean
)

CREATE TABLE testB
(
id integer,
testA_id integer,
checked boolean
)

如您所见,我在 TestB 中添加了一个选中的列。

TableA中可能有行在TableB中没有行像下面的数据:

测试A

ID|checked
1|true
2|true
3|false

测试B

ID|testA_id|checked
1|1|true
2|1|false
3|3|true

如您所见,TestA id = 2 没有 TestB

现在,假设您要显示 ALL TestA 行以及选中的 TableB 行(如果有)。

所以你需要一个左连接:

第一个案例

SELECT tA.*, tB.*
FROM testB AS tB
LEFT JOIN testA AS tA
ON (tA.id = tB.testA_id AND tB.checked)

结果

ID|checked|ID|testA_id|checked
1|true|1|1|true
2|true|null|null|null
3|false||3|3|true

返回 TableA 的 ID 1、2 和 3,如果有选中的 TableB 行,我们也返回它。

第二种情况

SELECT tA.*, tB.*
FROM testB AS tB
LEFT JOIN testA AS tA
ON tA.id = tB.testA_id
WHERE
tB.checked

结果

ID|checked|ID|testA_id|checked
1|true|1|1|true
3|false||3|3|true

在这种情况下,仅返回 ID 1 和 3,因为我们过滤结果以仅显示选中了 TableB 的结果。

关于sql - SQL 连接中的附加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18399309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com