如果我想在3个或更多表上执行连接,那么最佳语法是什么? 这是我的尝试:
Select *
from table1
inner join table2 using id1, table2
inner join table3 using id2, table3
inner join table4 using id4
where table2.column1="something"
and table3.column4="something_else";
看起来不错吗?我不确定的事情是 1)我需要用逗号分隔连接 2)我是否有权先将我的所有联接加入,然后再提出我的条件? 3)我会更好地使用子查询,如果是,那么核心语法是什么
感谢您的任何建议!
答案 0 :(得分:3)
尽可能避免使用*
。
准确指定要返回的数据。
使用标准样式格式化查询。
选择你喜欢的风格并坚持下去。
当您的查询变得更复杂时,您会感谢自己。
大多数优化器会识别WHERE
子句中的条件何时隐含INNER JOIN
,但没有理由不明确地编码;如果没有别的,它可以使你的WHERE
条款易于管理。
明确您加入的列。明确您正在使用的联接类型。 USING
似乎是一种可以让你陷入困境的捷径。
MySQL传统上不会处理子查询,也可能是希望的。这可能会在较新版本中发生变化,但还有其他方法可以在不依赖它们的情况下获取数据。
欢迎来到关系数据库的精彩世界!
select t1.*
, t2.*
, t3.*
, t4.*
from table1 t1
inner join table2 t2
on t1.id = t2.t1_id
and
t2.column1 = "something"
inner join table3 t3
on t2.id = t3.t2_id
and
t3.column4 = "something_else"
inner join table4 t4
on t3.id = t4.t3_id;
答案 1 :(得分:1)
1)我是否需要用逗号分隔联接
没有
2)我是否有权先将我的所有联接加入,然后再提出我的条件?
是
3)我会更好地使用子查询,如果是,那么核心语法是什么
没有。连接表是首选和正确的方法。
答案 2 :(得分:1)
e.g。 SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id WHERE table2.column1 ='Something'
每个行都会执行子查询,听起来好像只使用内连接就可以运行更有效的查询。
希望有所帮助。如果你能详细说明,我会提供更多解释。
答案 3 :(得分:1)
鉴于您要求table2
加入id1
- table1
和table2
中的列,table3
加入id2
table2
和table3
以及table4
中的列会在id3
- table3
和[{1}}中的列上加入:您必须执行此操作:
table4
我认为,与SELECT *
FROM table1
INNER JOIN table2 ON table2.id1 = table1.id1
INNER JOIN table3 ON table3.id2 = table2.id2
INNER JOIN table4 ON table4.id3 = table3.id3
WHERE table2.column1 = "something"
AND table3.column4 = "something_else"
- 声明相比,这种说法更加清晰明确地以什么方式加入。
答案 4 :(得分:0)
删除逗号和重复的表名,例如:
Select *
from table1
inner join table2 using id1
inner join table3 using id2
inner join table4 using id4
where table2.column1="something"
and table3.column4="something_else"
如果id4在表1中具有不同的名称,则明确命名连接条件,例如:
inner join table4 on table4.id = table1.table4i
答案 5 :(得分:0)
您可以使用自然连接加入要加入的表所共有的字段名称,如下所示。
SELECT * FROM table1 NATURAL JOIN table2 NATURAL JOIN table3 自然表4 在哪里table2.column1 =“某事” AND table3.column4 =“something_else”