选择左连接等数据的命令

时间:2014-08-15 10:24:26

标签: sql firebird firebird2.5

我想从我的数据库中获取数据而不使用' left join'因为它会导致低性能(显示6000条记录需要1.16分钟)。我需要做什么命令,如左连接。

我的数据库结构

Table 1
Doccode (String) |   Inv_no (String) |   Inv_date (Date) |
AA0012                2122240           13.07.2014
AA0013                2122360           13.07.2014
AA0014                2122480           14.07.2014
AA0015                2122510           14.07.2014
AA0016                2122612           15.07.2014

Table 2
Inv_no (String) |   close_date(date) |  close_time(time) |
AA0013                22.08.2014          11:11:12
AA0015                21.08.2014          11:14:12
AA0016                04.08.2014          12:11:12

Table 3
Inv_no (String) |   return_date(data)  | return_by
AA0012                09.08.2014         Admin
AA0013                06.08.2014         Admin

我想得到如下所示的结果

Doccode    |      Inv_no   |    Inv_date    |   close_date  |    close_time |  Return_Date
AA0012           2122240        13.07.2014      <null>         <null>          09.08.2014
AA0013           2122360        13.07.2014      22.08.2014     11:11:12        06.08.2014
AA0014           2122480        14.07.2014      <null>         <null>           <null>
AA0015           2122510        14.07.2014      22.08.2014     11:11:12         <null>
AA0016           2122612        15.07.2014      22.08.2014     11:11:12         <null>

在这种情况下将使用左连接(我知道它),但它非常......很慢,实际数据只有6000条记录!

还有什么方法可以获得像左连接一样的结果?请帮忙

注意:我使用firebird 2.5。

1 个答案:

答案 0 :(得分:0)

你应该用什么来获得这样的结果就是左连接。

可能有其他方法可以获得相同的结果,但左连接绝对是最快的方式。任何其他方式都会复杂得多。例如,如果你使用子查询来获取相关数据,那么数据库最多只能将其优化为与左连接相同的东西。

只有6000条记录,这样的查询会运行几毫秒。听起来你在加入的表上缺少索引。您应该至少拥有Table2.Inv_noTable3.Inv_no上的索引。