2014-11-07 3 views
0

TABLE 1 (ID,PID,PNO) содержит начальную и конечную точку, например; (A, B). с внешним ключом (ID, PID) Внешний ключ (ID)Как присоединиться к двум таблицам, чтобы результат содержал значения из второй таблицы между значениями первой таблицы

TABLE 2 (ID,PNO) содержит информацию о средней точке в порядке (a1, a2 ... bn-1, bn). с основным ключом (ID)

Я пытаюсь присоединиться к ним таким образом, что я могу получить [A, a1, a2 ... bn-1, bn, B].

Я принес данные, используя

SELECT PNO FROM TABLE2 WHERE ID= 123 UNION SELECT PNO FROM TABLE1 WHERE ID= 123 

и попробовал его в C# код, запрашивая все данные, а затем добавить условие х и переназначения их. Эта попытка - две длинные.

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

Примечание. Эти таблицы связаны друг с другом с помощью общего идентификатора поля, а PID в TABLE1 имеет два разных значения, например 1 для начала и 2 для конца. на основании этого PNO с 1 должен прийти первым, и PNO с 2, как ожидается, придет к концу.

ответ

0

«попробовал его в коде C#, извлекая все данные, а затем добавляя условия и переупорядочивая их».

Это, как правило, очень плохая идея, особенно если у вас много активности в сети. SQL очень хорошо манипулирует данными: на самом деле он оптимизирован для этой задачи. Итак, попробуйте передать условия в базу данных как предложение WHERE, используя ORDER BY, чтобы отсортировать конечный набор результатов и вернуть только нужные вам строки. Это может иметь большое влияние на общее прошедшее время, если существует большая разница между количеством строк в исходном наборе баз данных и окончательным набором C#.

Другие вещи. Если вы все еще находите это слишком медленно, у вас есть стандартная проблема настройки. Вы не предоставили какую-либо сложную информацию, необходимую для окончательного решения, так что вот некоторые догадки.

Вам нужны все записи для идентификатора, поэтому нет более эффективного способа объединения двух промежуточных результирующих наборов для получения окончательного набора. Но если эти два набора являются исключительными - то есть, если конечные точки в Table1 не включены в точках из Table2 (ваш вопрос не совсем ясно, на этом) - это UNION ALL будет более эффективным:

SELECT PNO FROM TABLE2 WHERE ID= 123 
UNION ALL 
SELECT PNO FROM TABLE1 WHERE ID= 123 

Это потому, что UNION выполняет дополнительную операцию для создания определенного набора значений. Пропуск этого шага позволит вам сэкономить некоторое время.

Индекс на table2 (ID, PNO) может ускорить время поиска, избегая необходимости прикоснуться к таблице вообще. Стоит ли накладные расходы на поддержание индекса, зависит от того, как часто вы хотите запускать этот запрос и как вы загружаете Table2. Это также зависит от того, какие дополнительные фильтры вы применяете, если будете действовать в моем первом абзаце.

+0

PID в TABLE1 имеет два отличных значения, например 1 для начала и 2 для конца. на основании этого PNO с 1 должен прийти первым, и PNO с 2, как ожидается, придет к концу. – sreejith

+0

Это еще не ясно. Измените свой вопрос с помощью некоторых фактических данных образца вместо псевдозначений. – APC

Смежные вопросы