如何有效地进行SQL连接?

时间:2011-09-23 12:55:58

标签: sql join greatest-n-per-group

我有两张桌子。

  1. 顺序
  2. 复制。
  3. 单个订单记录可以包含多个复制记录。我想加入这两个表,这样即使存在多个记录,我总是从连接中检索单个记录。 样本数据

    Replication table:
    ORDID     | STATUS | ID | ERRORMSG | HTTPSTATUS | DELIVERYCNT
    =========================================================
    
    1717410307      1   JBM-9e92ae0c  NULL       200   1 
    ----------
    1717410307      1   JBM-9fb59af1  NULL       400   -99
    ----------
    1717410308      1   JBM-0764b091  NULL       403   1
    ----------
    1717410308      1   JBM-0764b091  NULL       200   1
    

    订单表:

    ORDID | ORDTYPE | DATE
    ----------
    1717410307  CAR 22-SEP-2011
    1717410308  BUS 23-SEP-2011
    

    如何有效地进行连接,以便在订单表和应优先动态选择的复制表中获取尽可能多的记录。

    优先级可以定义为:

    1. 任何交付次数为-99
    2. 的记录
    3. HTTPSTATUS!= 200
    4. 请指导我如何继续加入?

      如果您需要任何澄清,请告诉我。

      非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

是否可以根据ORDER BYHTTPSTATUS使用DELIVERYCNT条款?

在这种情况下,您可以编写特定的ORDER BY并从中获取TOP 1不知道您使用哪个RDBMS )或获取ROW_NUMBER() OVER (ORDER BY ... ) AS RowN WHERE RowN = 1 } 但这是一个丑陋(但很快)的解决方案。

另一个选项是创建一个子查询,在其中添加一个新列,进行优先级计算。

要使查询生效,您应该考虑索引(或使用RDBMS特定解决方案,如包含列)