Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить sql запрос 
:(
    Опции темы
PROme2
Дата 29.5.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



что-то туплю
есть таблицы Т1 и Т2, которые кроме всего прочего содержат поля id, значения которых частично пересекаются
помогите составить запрос выборки рядков из Т1, id которых не содержится в Т2
заранее спасибо 
PM MAIL   Вверх
skyboy
Дата 29.5.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

SELECT * FROM T1 WHERE T1.id not in (SELECT id FROM T2)
 
PM MAIL   Вверх
BobiKK
Дата 29.5.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

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



А для мускула это приемлимо?
Может лучше через LEFT JOIN? 
PM MAIL   Вверх
skyboy
Дата 29.5.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



BobiKK, синтаксически - приемлимо. По скорости... Хм, не знаю. Если это ключи - одна скорость, неидексированные поля - другая.. И вообще, почему MySQL? Где это указано?  
PM MAIL   Вверх
madFobos
Дата 29.5.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(BobiKK @  29.5.2006,  22:29 Найти цитируемый пост)
А для мускула это приемлимо?
Может лучше через LEFT JOIN?


С какой версийй MySQL поддерживает вложенные запросы (я думал всегда, что с 5)? От этого и надо отталкиваться по поводу приемлимости. Для 4 точно покатит так:

Код

  SELECT T1.* FROM T1, T2 WHERE T1.id <> T2.id

 
PM MAIL   Вверх
-=Ustas=-
Дата 30.5.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 17
Всего: 69



madFobos, 
Цитата(madFobos @  29.5.2006,  23:08 Найти цитируемый пост)
SELECT T1.* FROM T1, T2 WHERE T1.id <> T2.id

Это бред, у тебя вывалит кучу записей!!!

Цитата(madFobos @  29.5.2006,  23:08 Найти цитируемый пост)
MySQL поддерживает вложенные запросы (я думал всегда, что с 5)? 

С версии 4.1
В твоем случае будет правильным запрос такого вида:
Код

SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T1.id is NULL
 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Vaulter
Дата 30.5.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



-=Ustas=-, сдается мне, что неверный это SQL запрос smile
выведет в первую очередь записи у которых id - нули....

а вот так будет работать:
Код

select t1.id,count(t2.id) as t2s from t1 
left join t2 on t1.id = t2.id
group by t1.id
having t2s = 0


Добавлено @ 15:56 
а еще есть RIGHT JOIN 


--------------------
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 31.5.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 17
Всего: 69



Vaulter, сдается мне у тебя неправильный запрос, т.к. при LEFT JOIN при несоответствующих записях возвращается значение NULL, а не ноль!!! smile 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Vaulter
Дата 31.5.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



-=Ustas=-, может быть 


--------------------
PM MAIL WWW ICQ   Вверх
PROme2
Дата 4.6.2006, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо всем за помощь, похоже вопрос сложнее, чем я думал, к сожалению, не один из вариантов не работал верно (по крайней мере у меня)

skyboy, это самый очевидный вариант, к сожалению, сервер его не понимает smile я сразу попробовал...

проблема уже решена... другим путем smile 
PM MAIL   Вверх
Mephisto
Дата 20.6.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Vaulter, следует писать:
Код

select t1.id,count(t2.id) as t2s from t1 
left join t2 on t1.id = t2.id
where t2s = 0
group by t1.id



Цитата(PROme2 @  4.6.2006,  01:08 Найти цитируемый пост)

проблема уже решена... другим путем

Код в студию!  smile  
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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