Объединение 3 таблиц и вставка в 4-ю таблицу на SQL-сервере - PullRequest
0 голосов
/ 26 февраля 2011

Я присоединяюсь к 3 таблицам - items, sales, & purchase.

А затем, вставив объединенные данные в 4-ю таблицу FULL_DETAIL_OF_ITEMS.

ITEMS таблица содержит столбцы: ITEM_CD, ITEM_NM, COM_CD, SALE_RT, PURCH_RT, MRP

SALES таблица содержит столбцы: ITEM_CD, ITEM_NM, SALE_QTY

PURCHASE таблица содержит столбцы: ITEM_CD, ITEM_NM, PURCH_QTY

FULL_DETAIL_OF_ITEMS таблица содержит столбцы:

ITEM_CD, ITEM_NM, COM_CD, SALE_RT, PURCH_RT, MRP, SALE_QTY, PURCH_QTY

Запрос:

insert into FULL_DETAIL_OF_ITEMS
  SELECT
     Items.Item_CD, 
     Items.Item_NM , 
     ITEMS.COM_CD, 
     ITEMS.SALE_RT, 
     ITEMS.PURCH_RT, 
     ITEMS.MRP, 
     SALES.SALE_QTY, 
     PURCHASE.PURCH_QTY
  FROM items
  JOIN sales on ITEMS.ITEM_CD = sales.ITEM_CD 
  JOIN purchase on items.ITEM_CD = purchase.ITEM_CD

Items таблица заполнена, но sales & purchase таблицы пусты, поэтому при выполнении вышеуказанного запроса ничего не происходит? Почему так?

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

Он обнаруживает, что в таблице продаж - sale_qty, а в таблице покупок purch_qty пусто, поэтому он должен заполнить нулем в этих столбцах окончательной таблицы и заполнить остальные столбцы, как они выбираются из таблицы элементов. который состоит из данных, поэтому он должен заполнить это.

Но разве это не так?

Согласно определению JOIN, ITEM_CD в таблице позиций не совпадает со столбцом ITEM_CD таблицы продаж и покупок, так как в обоих случаях он пуст, поэтому это и есть причина.

Но я хочу, чтобы остальные данные были вставлены в 4-ю таблицу, тогда есть ли способ сделать это?

Ответы [ 2 ]

6 голосов
/ 26 февраля 2011

Вам нужно изменить эти join операторы на left join.

По умолчанию join является «внутренним соединением», что означает, что будут включены только те строки, которые существуют на обеих сторонах объединения. «Левое объединение» включает в себя все строк на «левой» стороне объединения.

Пример:

from items
left join sales on ITEMS.ITEM_CD =sales.ITEM_CD
left join purchase on items.ITEM_CD =purchase.ITEM_CD
1 голос
/ 11 мая 2011

Вы можете минимизировать свой запрос, используя оператор select into, который по умолчанию создает новую таблицу во время выполнения.

select  Items.Item_CD,Items.Item_NM,Items.COM_CD,Items.Mrp,Items.Purchase_RT,Items.Sale_RT,
      purchase.Purchase_QTY,Sales.Sale_QTY
into full_details_of_items
from Items
inner join purchase
inner join Sales 
on purchase.Item_CD=Sales.Item_CD
on items.Item_CD=purchase.Item_CD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...