Возьмите результаты из нескольких SQL-запросов и вставьте их в таблицу

#sql

#sql

Вопрос:

У меня есть эти 3 запроса

 SELECT a.name
FROM customer1 a, customer2 b
WHERE a.id =  b.id

SELECT c.code
FROM segment1 c, orders e, country d, customer1 a
WHERE a.code_1 = b.code_2
AND c.segment1 = e.orders
AND c.segment1_id = 6

SELECT add.box, addr.address1, addr.address2
from customer1 a, infos addr, actions ac
WHERE a.account_id = addr.account_id
AND ac.deletion_status = 'N'                                        
 

Я хочу объединить результаты этих 3 запросов в одну итоговую таблицу.

Если я сделаю что-то подобное:

 SELECT a.name, c.code, addr.box, addr.address1, addr.address2
FROM customer1 a, customer2 b, segment1 c, orders e, country d, infos addr, actions ac
WHERE a.id = b.id
AND a.code_1 = b.code_2
AND c.segment1 = e.orders
AND c.segment1_id = 6
AND ac.deletion_status = 'N'                                        
 

Эффективно ли это? Вы рекомендуете что-то еще?

Комментарии:

1. Нет, это не сработает. Посмотрите union .

2. Не копируйте данные между таблицами, вместо этого создайте представление.

3. Совет сегодняшнего дня: всегда используйте современный, явный JOIN синтаксис! Проще писать (без ошибок), легче читать и поддерживать, и при необходимости легче преобразовать во внешнее соединение.

4. @jarlh не могли бы вы привести мне пример?

5. Возвращает ли он результат, который вы ожидаете? Если да, то все в порядке. (Но вам действительно следует переключиться на современный, явный синтаксис соединения.)

Ответ №1:

Если вы спросите меня, напишите хранимую процедуру, получите параметры, сначала приведите таблицы, которые вы будете использовать, а затем присоедините эти результаты к другим таблицам в хранимой процедуре, я думаю, что это самый эффективный метод.Если вы хотите, я могу привести вам пример. CREATE PROCEDURE [dbo].[SP_MyProcedure] @CustomerId int AS BEGIN Declare @CustomerName nvarchar(50) Set @CustomerName=(SELECT Top 1 a.name FROM customer1 a, customer2 b WHERE a.id = b.id and a.id=@CustomerId)SELECT c.code FROM segment1 c, orders e, country d, customer1 a WHERE a.code_1 = b.code_2 AND c.segment1 = e.orders AND c.segment1_id = 6 and a.name=@CustomerName END

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

Комментарии:

1. Большое спасибо за ваш быстрый ответ. Не могли бы вы привести мне пример, потому что я не очень хорошо знаком с sql. Заранее спасибо