Learn.net37 Ответов: 3

Как объединить 5 таблиц данных с помощью построителя запросов с одним и тем же именем столбца


Здравствуйте, я хочу спросить, есть ли у меня 5 таблиц с одинаковыми именами столбцов, но разными записями,
могу ли я добавить записи из всех таблиц в 1 таблицу и отобразить ее?

Что я уже пробовал:

я попробовал Query builder, но я не знал , так что некоторые могут помочь мне с этим или предложить что-нибудь

Karthik_Mahalingam

пост код

ZurdoDev

Да, где ты застрял?

3 Ответов

Рейтинг:
20

CHill60

Цитата: (sic)
у меня есть 5 таблиц с одинаковыми именами столбцов, но разными записями,
могу ли я добавить записи из всех таблиц в 1 таблицу и отобразить ее?
Если у вас есть 5 таблиц с одинаковыми именами столбцов, но разными записями, то то, что у вас есть, - это очень плохой дизайн базы данных.

Пересмотрите свой дизайн базы данных.

Например: у вас могут быть такие таблицы, как [Student], [Teacher], [Parent],[CateringStaff] и т.д.
Все эти таблицы будут иметь такие вещи, как [FirstName], [LastName], [DateOfBirth] и т. д. Все так же.
Лучший дизайн-это иметь таблицу под названием [Человек] с такими столбцами, как [FirstName], [LastName], [DateOfBirth] и т. д. плюс дополнительная колонка [PersonType] который может ссылаться на другую таблицу
Create table [PersonType](Id int, PersonType nvarchar(125))
В этой последней таблице есть строка для "ученика", "учителя", "родителя", "поставщика провизии" и т. д.

Если вы хотите получить всех людей в вашей базе данных, это простой запрос с одной таблицей :
SELECT * FROM Person
Если вы хотите получить всех учителей это еще один простой запрос:
SELECT * FROM Person P 
INNER JOIN PersonType PT on P.PersonType = PT.Id 
WHERE PT.PersonType = 'Teacher'
и так далее.

Если вы действительно хотите сохранить свои пять таблиц (пожалуйста, не делайте этого таким образом), то у вас нет другого выхода, кроме как использовать UNION. Однако вы не придется использовать временную таблицу, и вам абсолютно не нужно использовать слияние. UNION ALL не удаляет повторяющиеся строки, но UNION будет. Так что все, что вам нужно, это
SELECT * FROM Table1
UNION
SELECT * FROM Table2
UNION
SELECT * FROM Table3
UNION 
SELECT * FROM Table4
UNION 
SELECT * FROM Table5

(С оговоркой, что вы никогда не должны использовать SELECT * в подобных ситуациях, перечислите нужные столбцы явно)


Maciej Los

5ед!

Learn.net37

thx сэр, но мне нужно знать, что такое негативные вещи, чтобы использовать последний метод, который вы упомянули в union, или как это повлияет на базу данных ?

CHill60

Пять таблиц с точно такими же столбцами - это не очень хороший дизайн (см. Основы нормализации базы данных[^Это особенно верно, поскольку вы пытаетесь получить информацию из всех 5 таблиц в один набор записей, что означает, что эти строки принадлежат одному и тому же набору информации, а это означает, что все они должны быть в одной таблице.
Последний метод, о котором я упоминал (союз), не имеет в себе ничего негативного ЕСЛИ у вас есть те 5 таблиц, которые идентичны. Это не повлияет на базу данных. Если вы не измените свою базу данных, то именно этот запрос вам и нужно будет использовать.

Кстати, если вы хотите создать единую таблицу, вы используете этот запрос объединения, чтобы сделать это с помощью INSERT

Learn.net37

хорошо, что если на другой странице Я использую одну из этих таблиц для вставки записи с помощью sqldatasource или edit, это повлияет на что-либо, или элемент insert или edit появится в запросе union ?

CHill60

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

Learn.net37

да,поблагодарить у так много

Рейтинг:
2

Azimsaze Borna

Нет необходимости во временном столе


Maciej Los

Это не ответ. Пожалуйста, удалите его, чтобы избежать понижения голоса. Чтобы оставить комментарий, пожалуйста, используйте виджет "есть вопрос или комментарий".

Рейтинг:
1

Ramesh Kumar Barik

--Создание одной временной таблицы.
IF OBJECT_ID ('tempdb..#tmpTemp') НЕ ЯВЛЯЕТСЯ НУЛЕВЫМ
НАЧАТЬ
DROP TABLE #tmpTemp;
КОНЕЦ

Создать таблицу #tmpTemp (
ID INT identity(1, 1)
,YourColumn VARCHAR(200)
)

--- Вставьте все записи таблицы в эту временную таблицу
Вставить в #tmpTemp (YourColumn)
Выберите столбец 1
Из FirstTable

СОЮЗ

Выберите столбец 1
Из SecondTable

СОЮЗ

Выберите столбец 1
Из третьей таблицы

СОЮЗ

Выберите столбец 1
Из FourthTable

--------------------
Объедините YourMainTable как T
Использование #tmpTemp в качестве S
ON (T. YourMainColumnName = S. YourColumn)
КОГДА НЕ СООТВЕТСТВУЕТ ЦЕЛИ
ЗАТЕМ
INSERT (YourMainColumnName)
Значения (S. YourColumn)
ПРИ СОВПАДЕНИИ
ЗАТЕМ
ОБНОВЛЕНИЕ
Установите T. YourMainColumnName = S. YourColumn
ВЫХОДНОЕ ВОЗДЕЙСТВИЕ
,вставленный.*;

Проверьте этот код и замените свои таблицы.. :)


CHill60

Причина моего понижения: нет необходимости во временной таблице, если вместо UNION ALL используется UNION ALL, то дубликаты не появятся в конечном наборе записей.

Ramesh Kumar Barik

Уважаемые Chill60,

Все нормально. Я просто забыл использовать Union вместо Union ALl.

Спасибо.