Как эффективно объединить SQL? - PullRequest
1 голос
/ 23 сентября 2011

У меня есть две таблицы.

  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

Пожалуйста, сообщите мне, как я могу продолжить это присоединение?

Пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения.

Ваша помощь очень ценится!

1 Ответ

0 голосов
/ 08 октября 2011

Можно ли использовать предложение ORDER BY на основе HTTPSTATUS и DELIVERYCNT?

В этом случае вы можете написать конкретный ORDER BY и получить из него TOP 1 ( не знаю, какую СУБД вы используете ) или получаете ROW_NUMBER() OVER (ORDER BY ... ) AS RowN WHERE RowN = 1 Но это уродливое (но быстрое) решение.

Другой вариант - создать подзапрос, в который вы добавляете новыйстолбец, в котором будет производиться вычисление приоритета.

Чтобы сделать запрос эффективным, следует рассмотреть возможность индексации (или использования конкретных решений СУБД, таких как включенные столбцы)

...