2015-01-03 2 views
1

Мне нужна помощь в создании SQL-запроса. У меня просто есть базовые знания относительно SQL (insert, delete, alter, where, select), но никогда не приходилось иметь дело с агрегатными функциями или объединениями.SQL Statement для извлечения информации из нескольких таблиц

Так вот установка:

СТОЛ

  • CUST_ID
  • prod_id
  • StatusCode
  • ...

ТАБЛИЦА B

  • CUST_ID
  • land_id
  • ...

ТАБЛИЦА C

  • COUNTRY_ID
  • ...

ТАБЛИЦА D

  • COUNTRY_ID
  • код_страны

Таблица E

  • PRODUCT_ID
  • country_code1

Что должно делать SQL-заявление: Все строки, где statusCode из таблицы A - 1 или 2 или 3, и где country_code == country_code1.

Где country_code можно получить по таблице B, C, D и country_code1 с помощью таблицы Е.

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

Мой подход был это, но ясно, что это ужасно неправильно, так как я начинающий SQL:

SELECT * FROM TableA 
INNER JOIN TableB ON TableA.cust_id = TableB.cust_id 
INNER JOIN TableC ON TableB.landId = TableC.country_id 
INNER JOIN TableE ON TableA.prod_id = TableE.product_id 
INNER JOIN TableD ON TableE.country_code1 = TableD.country_code 
WHERE statusCode IN (1,2,3) 

ответ

1

Сверху моей головы.

Регистрация две группы таблиц с FK Объедините эти группы, Ограничить, что супер установить более прийти

SELECT * 
FROM (tableA A INNER JOIN tableB B ON A.cust_id=B.cust_id) 

INNER JOIN tableE E ON E.product_id=A.prod_id 
INNER JOIN (tableC C INNER JOIN tabldeD D ON D.country_id) 
ON D.country_code = E.country_code1 
WHERE A.statusCode IN(1,2,3) 

Мы не должны беспокоиться о бите кода страны, потому что в 'присоединиться'.

+1

Спасибо, это выглядит фантастически для меня :) – user3185894

0

Off верхней части моей головы (непроверенной, и я не 100% уверен, что это является вашим требованием):

select a.cust_id, a.prod_id, a.statusCode, 
     b.land_id, 
     c.country_id, 
     d.country_code, 
     e.product_id 
from TableA a, TableB b, TableC c, TableD d, TableE e 
where a.cust_id = b.cust_id   -- basic joins on common fields 
    and b.land_id = c.country_id 
    and b.land_id = d.country_id 
    and d.country_code = e.country_code1 
    and a.statusCode in (1, 2, 3)  -- finally the statuscode selection 
+0

Спасибо, но это не создаст крест продукта? Таблица A, B, C, D и E - действительно большие таблицы. Учитывая это, это все еще возможное решение? – user3185894

+0

Я не могу прокомментировать производительность, если ваши таблицы действительно большие. Обычно я использую этот подход, потому что, кстати, я к нему привык. Я еще не сталкивался с плохими результатами (если индексы верны). –

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