Вопрос:

SQL-запрос, объединяющий 6 таблиц (с одинаковыми полями)

mysql sql database database-design mariadb

54 просмотра

2 ответа

1 Репутация автора

Ну, мне трудно найти решение, которое мне нужно, я надеюсь, что кто-то может мне помочь. Есть 6 разных магазинов с разными товарами, некоторые в одних магазинах совпадают, а другие нет.

У меня есть 6 таблиц с одинаковыми полями: аббревиатура, имя, категория, количество и стоимость. Мне нужно объединить все продукты в одной таблице со ссылкой «Акроним» между ними.

Моя база данных не поддерживает функцию FULL OUTER JOIN.

Мне нужно возвращение, как это:

(* Qtt = Количество)

РЕЗУЛЬТАТЫ SQL

Автор: Ivan Grasso Источник Размещён: 08.11.2017 10:26

Ответы (2)


0 плюса

23581 Репутация автора

Скажем, t1, t2, t3, t4, t5, t6 - ваши таблицы. Это должно помочь вам начать:

select
     acro.acronym,t1.name t1name, t2.name t2name .....
from (
      select acronym from t1 union
      select acronym from t2 union
      select acronym from t3 union
      select acronym from t4 union
      select acronym from t5 union
      select acronym from t6
     ) acro
left join t1 on acro.acronym = t1.acronym 
left join t2 on acro.acronym = t2.acronym 
left join t3 on acro.acronym = t3.acronym 
left join t4 on acro.acronym = t4.acronym 
left join t5 on acro.acronym = t5.acronym 
left join t6 on acro.acronym = t6.acronym 

Подзапрос acroпросто создает уникальный список всех аббревиатур из 6 таблиц, а затем, оставляя соединение с исходными таблицами, выровняет данные по всем (и всем) аббревиатурам.

Автор: Used_By_Already Размещён: 09.11.2017 01:51

0 плюса

80253 Репутация автора

Это предполагает, что у них нет идентичных столбцов:

CREATE TABLE AllData
( SELECT acronym, this, that, ... FROM t1 )
UNION ALL
( SELECT acronym, this, NULL as that, ... FROM t2 ) -- no "that" in t2
UNION ALL
( SELECT acronym, NULL as this, that, ... FROM t3 ) -- no "this" in t3
...

Если acronymэто так PRIMARY KEY, то начните так:

CREATE TABLE AllData ( PRIMARY KEY(acronym) )
( SELECT ...

Если вам нужен новый AUTO_INCREMENT, то сделайте это:

CREATE TABLE AllData ( id INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(id) )
( SELECT ...

Если они имеют одинаковые столбцы, тогда игнорируйте мои заметки о NULL as ....

Автор: Rick James Размещён: 09.11.2017 07:42
Вопросы из категории :
32x32