Получение данных из двух разных таблиц в одну таблицу? - PullRequest
2 голосов
/ 19 сентября 2009

У меня есть следующие две таблицы:

uid   | ABC   | ... (bunch of other stuff) ...
1     | val 1 | ... (bunch of other stuff) ...
2     | val 2 | ... (bunch of other stuff) ...
3     | val 3 | ... (bunch of other stuff) ...

и ...

uid   | DEF   | ... (bunch of other stuff) ...
4     | val 4 | ... (bunch of other stuff) ...
5     | val 5 | ... (bunch of other stuff) ...
6     | val 6 | ... (bunch of other stuff) ...

Я хочу закончить с ...

uid   | text  | ... (bunch of other stuff) ...
1     | val 1 | ... (bunch of other stuff) ...
2     | val 2 | ... (bunch of other stuff) ...
3     | val 3 | ... (bunch of other stuff) ...
4     | val 4 | ... (bunch of other stuff) ...
5     | val 5 | ... (bunch of other stuff) ...
6     | val 6 | ... (bunch of other stuff) ...

Это выглядит так просто, но я просто не могу понять, как это сделать. Это не соединение? Это 1010 *

Ответы [ 4 ]

5 голосов
/ 19 сентября 2009

Здесь вам поможет пункт UNION. Он объединяет два или более набора результатов в один.

Попробуйте:

SELECT uid, ABC, OtherStuff
FROM Table1

UNION

SELECT uid, DEF, OtherStuff
FROM Table2

UNION

SELECT uid, GHI, OtherStuff
FROM Table3

ORDER BY uid

Существует вариация на эту тему с оператором UNION ALL. UNION явно удалит дубликаты строк, а UNION ALL сохранит их.

Это имеет последствия, выходящие за рамки простого различия в строках: для удаления дубликатов оператор UNION должен отсортировать окончательный набор результатов. Это накладные расходы, оператор UNION ALL не испытывает. Более того, явная операция сортировки может привести к тому, что результирующий набор, собранный UNION, будет отличаться в порядке сортировки по сравнению с UNION ALL. Я предлагаю вам использовать явный оператор ORDER BY после сбора набора результатов, чтобы убедиться, что ваш порядок сортировки соответствует вашему.

Обратите также внимание, что количество столбцов должно совпадать в наборе результатов, равном UNION ed. Из ОП не ясно, как две таблицы различаются по количеству столбцов, которые они хранят, и поэтому я не решаюсь делать UNION между двумя SELECT * операторами.

1 голос
/ 19 сентября 2009

Это объединит оба набора результатов. Чтобы сделать объединение, столбцы должны быть совместимых типов.

(SELECT * FROM table1) UNION (SELECT * FROM table2)
1 голос
/ 19 сентября 2009

выбрать * в таблицу3 из (выберите * из таблицы 1) выберите * из таблицы 2) как tmp

0 голосов
/ 19 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...