Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из двух таблиц с заполнением нулями, ставить нули вместо недостающих записей 
:(
    Опции темы
_Y_
Дата 28.11.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



Помогите пожалуйста с таким впросом: В простейшем случае имеются две таблицы с полями:
Table1.key, Table1.value1
Table2.key, Table2.value2
Нужно сделать выборку таким образом, чтобы получить на выходе key, value1, value2 для всех имеющихся значений key, дополнив недостающие value1 и value2 нулями. Если бы списки key были одинаковые, нужный результат получился бы запросом
Код

SELECT Table1.key, Table1.value1, Table2.value2 FROM Table1, Table2 WHERE Table1.key = Table2.key;

Но эти списки перекрываются лишь частично. В результате на выходе коротенькая таблица. Надо же, чтобы в первом поле были все возможные значения key из обоих таблиц, а в остальных полях вставить где надо нули.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
skyboy
Дата 28.11.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Код

SELECT t1.key, t1.value, t2.value /*записи, присуствующие в обоих таблицах*/
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.key = t2.key
UNION ALL
SELECT t1.key, t1.value, 0 /*записи, которые есть в первой, но нет во второй таблице*/
FROM Table1 t1
LEFT JOIN Table t2
ON t1.key = t2.key
WHERE t2.key is NULL
UNION ALL 
SELECT t2.key, 0, t2.value /*записи, которые есть во второй таблице, но нету в первой*/
FROM Table2
LEFT JOIN Table1 t1
ON t2.key = t1.key
WHERE t1.key is NULL

PM MAIL   Вверх
_Y_
Дата 28.11.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: нет
Всего: 34



skyboy, спасибо. Идея вроде понятна. Но очень уж страшная крокозябра получается. Дело в том, что таблиц таких у меня не две, а пять (две я написал для примера). Так что проще всего мне, видимо, сделать отдельные выборки в текстовые файлы и обьединить внешней утилиткой  smile


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
check
Дата 28.11.2007, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 3
Всего: 23



Цитата(_Y_ @  28.11.2007,  12:44 Найти цитируемый пост)
Надо же, чтобы в первом поле были все возможные значения key из обоих таблиц
Тут вот с этим сложность только.

а с остальным справился бы запрос типа
Код

Table1 FULL OUTER JOIN Table2 USING (key)


А может получится сотворить что-то вроде
Код

SELECT t.key, Table1.value1, Table2.value2 FROM Table1  t  FULL OUTER JOIN Table2  t  USING (key)
 ?
PM MAIL   Вверх
Akina
Дата 28.11.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Код

SELECT t.key, 
       IF(Table1.value IS NULL, 0, Table1.value), 
       IF(Table2.value IS NULL, 0, Table2.value) 
FROM            Table1  t  
FULL OUTER JOIN Table2  t  
USING (key)
?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
check
Дата 28.11.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 3
Всего: 23



 ---


Это сообщение отредактировал(а) check - 28.11.2007, 23:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.