在内部加入订购

时间:2010-11-01 14:31:44

标签: sql sql-server inner-join

我将内部联接放入我的查询中。我得到了结果,但不知道数据是如何输出的。任何人都可以告诉我内部联接如何匹配数据。我正在显示图像。有两张桌子(一张或两张桌子)。

alt text

据我说,第一行应该是Mohit,但输出是不同的。请告诉我。

提前致谢。

6 个答案:

答案 0 :(得分:11)

SQL中,除非您在ORDER BY子句中指定输出,否则不会定义输出的顺序。

试试这个:

SELECT  *
FROM    one
JOIN    two
ON      one.one_name = two.one_name
ORDER BY
        one.id

答案 1 :(得分:5)

如果您希望数据以某种方式返回,则必须对其进行排序。当你说你期望“Mohit”成为第一行时,我假设你这么说,因为“Mohit”是[One]表中的第一行。但是,当SQL Server连接表时,它不一定按您认为的顺序加入。

如果您希望返回[One]的第一行,请尝试按[One].[ID]排序。或者,您可以order by任何其他列。

答案 2 :(得分:5)

在主查询中避免使用SELECT *

避免重复列:JOIN条件确保One.One_Nametwo.One_Name相等,因此您无需在SELECT子句中返回两者。

避免使用重复的列名称:使用“别名”重命名One.IDTwo.ID

使用ORDER BY子句中的列名('alises',如果适用)添加SELECT子句。

建议重写:

SELECT T1.ID AS One_ID, T1.One_Name, 
       T2.ID AS Two_ID, T2.Two_name
  FROM One AS T1
       INNER JOIN two AS T2
          ON T1.One_Name = T2.One_Name
 ORDER 
    BY One_ID;

答案 3 :(得分:3)

在第一次查询结束时添加ORDER BY ONE.ID ASC

默认情况下没有订购。

答案 4 :(得分:1)

默认情况下,SQL不会返回任何排序,因为这种方式更快。它不必首先查看您的数据,然后决定该怎么做。

您需要添加order by子句,并且可能按照您期望的ID排序。 (有一个名字的副本,因此我假设你想要One.ID)

select * From one
inner join two
ON one.one_name = two.one_name
ORDER BY one.ID

答案 5 :(得分:0)

我发现加入时是一个问题,但是您可能会发现此博客对于了解后面的Joins的工作方式很有用。 How Joins Work..

[已编辑] @Shree谢谢您指出这一点。 关于合并联接的段落。它提到了连接的工作方式...

  

像   哈希联接,合并联接包括两个步骤。首先,两个表   join在join属性上排序。只需两个即可完成   通过外部合并排序通过每个表。最后,   当从下一个有序元素中拉出时生成结果元组   比较每个表和联接属性

相关问题