如何有效地进行SQL连接?
我有两张桌子如何有效地进行SQL连接?,sql,join,greatest-n-per-group,Sql,Join,Greatest N Per Group,我有两张桌子 命令 复制 单个订单记录可以有多个复制记录。我希望联接这两个表,这样即使存在多个记录,我也总是从联接中检索一个记录。 样本数据 Replication table: ORDID | STATUS | ID | ERRORMSG | HTTPSTATUS | DELIVERYCNT ========================================================= 1717410307 1 JBM-9e92ae0c NULL
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
如何有效地进行连接,以便在order表和复制表中获得尽可能多的记录,并根据优先级动态选择这些记录
优先级可定义为:
非常感谢你的帮助 是否可以基于
HTTPSTATUS
和DELIVERYCNT
使用ORDER BY
子句
在这种情况下,您可以编写一个特定的ORDER BY
并从中获取TOP 1
(不知道您使用的是哪种RDBMS)或获取行号()作为RowN,其中RowN=1
但这是一个丑陋(但很快)的解决方案
另一个选项是创建一个子查询,在其中添加一个新列,该列将进行优先级计算
< >为了使查询有效,您应该考虑索引(或使用RDBMS特定解决方案,如包含的列)以及如果您具有多个-99和http!200?空HTTPSTATUS是否符合
HTTPSTATUS!=200
?通常,aNULL!=200
产生NULL
表示将不选择该行。您使用的数据库引擎和版本是什么?添加了[best-n-per-group]标记。