[英]How to do SQL join effectively?
我有两张桌子。
单个订单记录可以具有多个复制记录。 我想联接这两个表,这样即使存在多个记录,我也总是从联接中检索单个记录。 样本数据
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
我将如何有效地进行联接,这样,我将在顺序表和复制表中获得尽可能多的记录,这些记录应根据优先级动态选择。
优先级可以定义为:
请指导我如何进行此加入?
如果需要任何说明,请告诉我。
非常感谢您的帮助!
是否可以基于HTTPSTATUS
和DELIVERYCNT
使用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.