繁体   English   中英

SQL如何有效地联接?

[英]How to do SQL join effectively?

我有两张桌子。

  1. 订购
  2. 复制。

单个订单记录可以具有多个复制记录。 我想联接这两个表,这样即使存在多个记录,我也总是从联接中检索单个记录。 样本数据

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. HTTPSTATUS!= 200

请指导我如何进行此加入?

如果需要任何说明,请告诉我。

非常感谢您的帮助!

是否可以基于HTTPSTATUSDELIVERYCNT使用ORDER BY子句?

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

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

为了使查询有效,您应该考虑建立索引(或使用RDBMS特定的解决方案,例如包含的列)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM