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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Любая СУБД] Помогите составить SQL-запрос! 
V
    Опции темы
Данкинг
Дата 25.6.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Вот такое задание. Есть две таблицы tab1 и tab2 с одинаковой структурой: id и m_nam. Как понять, содержат ли они идентичные данные, одним запросом?
 smile 
Думал-думал, ничего пока не придумал.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
azesmcar
Дата 25.6.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



абсолютно идентичные, или содержат ли они хоть одну идентичную запись?

если нужно проверить на как минимум одну идентичную запись - то можно так
Код

select count(t1.id) > 0 from tbl2)
  from tab1 t1, tab2 t2
 where t1.id = t2.id
   and t1.title = t2.m_name

если нужно проверить на абсолютную идентичность - то как-то так
Код

select count(*) = 0
  from tbl1 t1
  left outer join tab2 t2 on t1.id = t2.id
                         and t1.m_name = t2.m_name
 where t2.id is null


первое, что пришло в голову, должно работать.

Это сообщение отредактировал(а) azesmcar - 25.6.2010, 16:01
PM   Вверх
Данкинг
Дата 25.6.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(azesmcar @  25.6.2010,  16:47 Найти цитируемый пост)
если нужно проверить на абсолютную идентичность

Да, абсолютную.
А зачем "where t2.id is null", не доходит до меня?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
azesmcar
Дата 25.6.2010, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Данкинг @  25.6.2010,  16:12 Найти цитируемый пост)
А зачем "where t2.id is null", не доходит до меня? 

ну outer join вернет все строки, для тех, для которых не найдено соответствие вернет null вместо значений из второй таблицы, тоже самое для первой, правильнее будет так
Код

select count(*) = 0
  from tab1 t1
  left outer join tab2 t2 on t1.id = t2.id
                         and t1.m_name = t2.m_name
 where t2.id is null and t1.id is null


PM   Вверх
Данкинг
Дата 25.6.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(azesmcar @  25.6.2010,  17:18 Найти цитируемый пост)
ну outer join вернет все строки, для тех, для которых не найдено соответствие вернет null вместо значений из второй таблицы, 

Да, до меня уже постепенно дошло. smile 
Сейчас работает так, что если таблицы одинаковые, то возвращается 0, а если разные, то -1.

И "count(*) = 0" как понять? Т.е. "count(*)" я, разумеется, понимаю, а приравнивание нулю зачем?
Я ещё туплю весь день, у нас тут +33С температура. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
azesmcar
Дата 25.6.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Данкинг @  25.6.2010,  16:32 Найти цитируемый пост)
И "count(*) = 0" как понять? Т.е. "count(*)" я, разумеется, понимаю, а приравнивание нулю зачем?

это не приравнивание, это проверка...типа bool smile в общем там уже пиши что угодно, это просто в виде мысли.

Цитата(Данкинг @  25.6.2010,  16:32 Найти цитируемый пост)
Я ещё туплю весь день, у нас тут +33С температура. smile  

вам Москвичам не угодишь, то жарко, то холодно, что за капризы? smile

Добавлено через 1 минуту и 16 секунд
Цитата(Данкинг @  25.6.2010,  16:32 Найти цитируемый пост)
Сейчас работает так, что если таблицы одинаковые, то возвращается 0, а если разные, то -1.

это тире или минус? smile boolean со значением -1 выглядет странно smile

Это сообщение отредактировал(а) azesmcar - 25.6.2010, 16:36
PM   Вверх
Данкинг
Дата 25.6.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(azesmcar @  25.6.2010,  17:36 Найти цитируемый пост)
boolean со значением -1 выглядет странно

Это минус, Access так и возвращает. smile Я модернизировал:
Код

select iif(count(*)<>0,'Равны','Не равны')  from tab1 t1  left outer join tab2 t2 on t1.id = t2.id  and t1.nam = t2.nam  where t2.id is null and t1.id is null

 smile 
Цитата(azesmcar @  25.6.2010,  17:36 Найти цитируемый пост)
вам Москвичам не угодишь, то жарко, то холодно, что за капризы? 

Я никогда на холод не жаловался. smile А 33 в офисе у нас было, на улице 31 примерно сейчас. smile 
В общем, пока будем считать, что вопрос решён. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
azesmcar
Дата 25.6.2010, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Данкинг @  25.6.2010,  19:25 Найти цитируемый пост)
А 33 в офисе у нас было, на улице 31 примерно сейчас. 

а вы отопление отключите smile 

PM   Вверх
Данкинг
Дата 25.6.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(azesmcar @  25.6.2010,  20:30 Найти цитируемый пост)
а вы отопление отключите

Кстати, с отоплением зимой у нас тоже градусов 30 постоянно. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
azesmcar
Дата 25.6.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(Данкинг @  25.6.2010,  20:12 Найти цитируемый пост)
Кстати, с отоплением зимой у нас тоже градусов 30 постоянно. smile  

константа (подумал Штирлиц) smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




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


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

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