Mysql连接语法

时间:2009-07-03 09:09:16

标签: mysql database join

如果我想在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)我会更好地使用子查询,如果是,那么核心语法是什么

感谢您的任何建议!

6 个答案:

答案 0 :(得分:3)

  1. 尽可能避免使用*
    准确指定要返回的数据。

  2. 使用标准样式格式化查询。
    选择你喜欢的风格并坚持下去。
    当您的查询变得更复杂时,您会感谢自己。

  3. 大多数优化器会识别WHERE子句中的条件何时隐含INNER JOIN,但没有理由不明确地编码;如果没有别的,它可以使你的WHERE条款易于管理。

  4. 明确您加入的列。明确您正在使用的联接类型。 USING似乎是一种可以让你陷入困境的捷径。

  5. MySQL传统上不会处理子查询,也可能是希望的。这可能会在较新版本中发生变化,但还有其他方法可以在不依赖它们的情况下获取数据。

  6. 欢迎来到关系数据库的精彩世界!

    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)

  1. 联接不以逗号分隔
  2. ANSI语法首先将连接放入where where condition
  3. e.g。 SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id WHERE table2.column1 ='Something'

    1. 我不是100%肯定你想要实现的目标。但看起来你不需要使用子查询。
    2. 每个行都会执行子查询,听起来好像只使用内连接就可以运行更有效的查询。

      希望有所帮助。如果你能详细说明,我会提供更多解释。

答案 3 :(得分:1)

鉴于您要求table2加入id1 - table1table2中的列,table3加入id2 table2table3以及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”