2010-11-01 79 views
15

我在内部加入了我的查询。我得到了结果,但不知道数据如何在输出。可以告诉我,如何内部连接匹配data.Below我正在展示一张图片。有两张桌子(一张或两张桌子)。在内部加入排序

alt text

据我,第一行应该是莫希特但输出different.Please告诉我。

在此先感谢。

回答

3

你,如果你想要的数据回来一定的方式排序。当你说你期待“Mohit”成为第一行时,我假设你说因为“Mohit”是[One]表中的第一行。但是,当SQL Server加入表时,它不一定按照您的想法加入。

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

+0

感谢您的答复。我知道订单但我想知道内部连接如何在内部工作? – 2010-11-03 08:12:39

+0

当您执行INNER JOIN时,SQL Server将确定查找匹配行(嵌套循环等)的最佳方法。这会导致结果的随机排序。 – dotariel 2010-11-03 12:49:40

+2

任何人都知道我是否可以强制(特别是SQLite)连接被“排序”? – 2014-07-02 11:18:08

3

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

默认情况下没有排序。

+0

但从表中选择记录时,默认顺序是“ASC” – Vijjendra 2010-11-01 14:41:20

+0

感谢您的答复。我知道顺序但我想知道内部连接如何在内部工作? – 2010-11-03 08:14:09

+0

@Mohit - 一旦你做了'JOIN',就没有自然的秩序。你得到的结果是正确的,但无序。您的单个表“SELECT”的顺序可能是因为聚集索引。 – JNK 2010-11-03 12:02:58

9

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

试试这个:

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

+1:使用'ORDER BY'子句,顺序不可能是随机的并且可能是可预测的(给出足够的信息),但是该点是“输出未定义”。 – onedaywhen 2010-11-01 15:27:49

+0

感谢您的答复。我知道订单但我想知道内部连接如何在内部工作? – 2010-11-03 08:13:21

+0

为查询构建计划(只需在查询窗口中按下“Ctrl-L”),它会显示算法。 – Quassnoi 2010-11-03 08:57:46

1

默认情况下,SQL不返回任何顺序,因为这种方式更快。它不必首先浏览您的数据,然后决定要做什么。

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

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

在主查询,避免SELECT *

避免重复列:JOIN条件确保One.One_Nametwo.One_Name将等于因此就不需要到SELECT子句中同时返回。

避免重复列名:使用'别名'重命名One.IDTwo.ID

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

建议重新写:

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; 
-1

是莫希特smirkingman是正确的。即使你使用Order by子句而没有指定顺序作为asssending或dessending巨大的数据库给你不可预知的肛门