gpt4 book ai didi

mysql - JOIN 或 WHERE 中的条件?

转载 作者:行者123 更新时间:2023-11-29 00:18:43 25 4
gpt4 key购买 nike

哪个更有效,把条件放在JOIN中:

SELECT * FROM table1
LEFT JOIN table2 ON
table1.id=table2.fk AND
table1.field1='some' AND
....

或者放在 WHERE:

SELECT * FROM table1
LEFT JOIN table2 ON
table1.id=table2.fk
WHERE
table1.field1='some' AND
....

最佳答案

它们没有效率高低之分,只是功能不同。

在没有过滤器的情况下,这会将所有记录从 master 连接到 subsidiary 中匹配的记录

select * from t1
left join t2 on t1.a = t2.c

使用where,并在子表上进行过滤,此连接将等同于内部连接

select * from t1
left join t2 on t1.a = t2.c
where t2.d=5

使用连接,并在子表上进行过滤,这将过滤子表的记录

select * from t1
left join t2 on t1.a = t2.c and t2.d=5

使用where,在主表上过滤,这个过滤主表记录

select * from t1
left join t2 on t1.a = t2.c
where t1.b = 3

使用连接,这会过滤主控中可以连接的记录,但仍会返回主控中的所有记录。

select * from t1
left join t2 on t1.a = t2.c and t1.b = 3

所以给定下表

表 t1

a           b
----------- -----------
1 2
1 3
2 4
3 3

表 t2

c           d
----------- -----------
1 9
4 5
2 5

结果是

查询1

a           b           c           d
----------- ----------- ----------- -----------
1 2 1 9
1 3 1 9
2 4 2 5
3 3 NULL NULL

查询2

a           b           c           d
----------- ----------- ----------- -----------
2 4 2 5

查询3

a           b           c           d
----------- ----------- ----------- -----------
1 2 NULL NULL
1 3 NULL NULL
2 4 2 5
3 3 NULL NULL

查询4

a           b           c           d
----------- ----------- ----------- -----------
1 3 1 9
3 3 NULL NULL

查询5

a           b           c           d
----------- ----------- ----------- -----------
1 2 NULL NULL
1 3 1 9
2 4 NULL NULL
3 3 NULL NULL

关于mysql - JOIN 或 WHERE 中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21874604/

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