![]() |
|
Модераторы: LSD |
![]()
|
|
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Многоуважаемый ALL!
Возникла такая необходимость получить одним селектом один набор данных из нескольких таблиц с разной структурой, но при этом в этих таблицах некоторые поля одноименные. Например: table1 id,name,description,flag table2 id,name,content,date,flag соединение таблиц даст набор данных, например: id,name,description,flag,id,name,content,date,flag т.е. произведение. UNION, само собой, не прокатывает из-за разницы в структуре. а можно ли получить такой набор данных, в котором структура будет результирующей, например: id,name,description,flag,content,date соответственно в тех строках, которые взяты из первой таблицы content и date будут NULL аналогично для строк из второй. Вообще возможно такое в SQL92? Если есть мысли - пишите, любая идея мне интересна. Спасибо! -------------------- Теперь при чем :P |
|||
|
||||
| boevik |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 6 Всего: 35 |
Ignat, уверен что UNION не прокатывает?
А если так:
Или full join для связи двух тавлиц по id
-------------------- Никогда не говори никогда |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Ignat
Если одноименные поля еще и одинаковые данные хранят - то какого черта? вынести в отдельную таблицу и привязать к ней различающиеся данные. Выборку делать тупым множественным inner join. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Ignat |
|
||||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
boevik, подозреваю, что я не правильно изложил проблему.
Первый запрос даст набор данных в таком виде (если я не путаю):
А можно ли такой результат получить?
C full join'ом проблема - в MySQL его нет, а попросил я в SQL92, потому что меня устраивают подселекты (в отличие от MYSQL), хотя это в данном случае мало чем может помочь. -------------------- Теперь при чем :P |
||||
|
|||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 6 Всего: 35 |
Тогда так:
Если есть одинаковые ID, то что надо получить? -------------------- Никогда не говори никогда |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Akina, не выйдет - это таблицы разных модулей, а будут ли они зависит от конфигурации.
boevik, имена таблиц из которых будет выборка я получаю запросом перед этим. Т.е. к моменту выборки данных я не знаю какие таблицы участвуют в запросе, и, лишь, после первого запроса буду знать. Сейчас думаю, чем так извращаться, наверное, надо сделать таблицы с одинаковой стуктурой, хоть и с избыточными данными. Это сообщение отредактировал(а) Ignat - 15.9.2004, 12:27 -------------------- Теперь при чем :P |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 1 Всего: 64 |
Ignat А чем тебе UNION не нравиться? Или я тоже тебя не правильно понял
П.С. Если опять не то, то приведи полные исходные данные и конечные. Так будет понятнее. Это сообщение отредактировал(а) <Spawn> - 15.9.2004, 13:22 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Ignat
В таком случае где гарантия что записи из таблиц с одинаковым, к примеру, ID, содержат также одинаковые name и flag? или это ГАРАНТИРОВАНО? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Ignat |
|
||||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Это таблицы, их больше, но остальные не принципиальны в данный момент. Запрос №1:
С этого я поимел имена таблиц, e.g. news и static. Теперь мне как-то надо состряпать новый запрос, чтобы выбрать конечные данные из таблиц, например, news и static в один набор данных. <Spawn>, UNION позволяет объединить результаты запросов при полном совпадении структур данных, или я не прав? Добавлено @ 13:54 Akina, id гарантированно, флажки - нет. Добавлено @ 13:58 что-то я хреново объясняю. у меня есть желание, чтоб при объединении таблиц, при совпадении имен полей данные клались в одно и тоже поле, но в разных строках, если совпадений по полям нет, то появится такое поле, где для строчек из другой таблицы стоит NULL. Блин, всё равно фраза мутная. -------------------- Теперь при чем :P |
||||
|
|||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 1 Всего: 64 |
При использовании UNION необходимо лишь, чтобы типы выбираемых полей каждого селекта совпадали и было одинаковое количество выбираемых полей, то есть тебе, как уже сказал boevik, нужно сделать следующее:
SELECT id, name, description, NULL, NULL FROM table1 UNION SELECT id, name, NULL, NULL, content FROM table2 т.е. за место несуществующих полей подставляешь NULL, который совместим со всеми типами данных П.С. To Admin - чего то не то с парсером SQL кода - вырезается ключевое слово UNION Это сообщение отредактировал(а) <Spawn> - 15.9.2004, 14:59 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Спасибо всем. Наконец догнал
-------------------- Теперь при чем :P |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |