Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) не join left (число прочтений - 4121 )
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
не join left
05. Ноября 2008 :: 17:11
Печать  
есть таблицы:
t1
  id
  doc
  time

t2
 doc
 rekvizit

задача вывести все
doc,time,rekvizit

но трабла в том что при запросе
select  
   t1.doc,
   t1.time,
   t2.rekvizit
from  
  t1,t2
where
  t2.doc=t1.doc
and t1.doc=значение

выводит только строки где t2.doc=значение присутствует.

есть ли способ показывать все строки
с t1.doc=значение кроме  join left (а то он выполнение запроса затягивает на долго)
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: не join left
Ответ #1 - 05. Ноября 2008 :: 17:28
Печать  
Слабовато доходит... можно с примером, с цифирями?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: не join left
Ответ #2 - 06. Ноября 2008 :: 08:19
Печать  
(0) лучше опиши задачу подробней
скорее всего нужно следущее
Код
Выбрать все
select  
   t1.doc,
   t1.time,
   t2.rekvizit
from  
  t1
left join t2 on   t2.doc=t1.doc
where
and t1.doc=значение 

  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #3 - 06. Ноября 2008 :: 08:42
Печать  
Цитата:
select 
   t1.doc,
   t1.time,
   t2.rekvizit
from 
  t1
left join t2 on   t2.doc=t1.doc
where
and t1.doc=значение


Да это правильный запрос... но я же говорю надо без join
t1 - 18 000 записей t2- 15000
двумя селектами выборка по всем таблицам без последного ( where
and t1.doc=значение ) , тоесть все записи t1 + все записи t2+ цикл соответствия проходят за ~10-15 сек (выборка за год), с джоином выборка за месяц >минуты
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #4 - 06. Ноября 2008 :: 08:43
Печать  
индкексы:
t1
primary t1.id
index doc,time

t2
primary doc
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: не join left
Ответ #5 - 06. Ноября 2008 :: 08:53
Печать  
kriblya писал(а) 06. Ноября 2008 :: 08:42:
Цитата:
select  
  t1.doc,
  t1.time,
  t2.rekvizit
from  
 t1
left join t2 on   t2.doc=t1.doc
where
and t1.doc=значение


Да это правильный запрос... но я же говорю надо без join
t1 - 18 000 записей t2- 15000
двумя селектами выборка по всем таблицам без последного ( where
and t1.doc=значение ) , тоесть все записи t1 + все записи t2+ цикл соответствия проходят за ~10-15 сек (выборка за год), с джоином выборка за месяц >минуты

А где в этом запросе год и месяц?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #6 - 06. Ноября 2008 :: 08:58
Печать  
сорри
t1.time- поле TIMESTAMP
бд mysql
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: не join left
Ответ #7 - 06. Ноября 2008 :: 09:07
Печать  
Я об этом: kriblya писал(а) 06. Ноября 2008 :: 08:42:
тоесть все записи t1 + все записи t2+ цикл соответствия проходят за ~10-15 сек (выборка за год), с джоином выборка за месяц >минуты

Где в твоём запросе задаётся период?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: не join left
Ответ #8 - 06. Ноября 2008 :: 09:16
Печать  
а может так
Код
Выбрать все
select  
  t1.doc,
  t1.time,
  t2.rekvizit
from   t1
inner join t2 on   t2.doc=t1.doc
where
and t1.doc=значение
union
select   t2.doc,NULL,NULL from   t2
 

  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #9 - 06. Ноября 2008 :: 09:20
Печать  
t1.time- поле TIMESTAMP
поле формата гггг.мм.дд чч.мм.сс
если в запросе insert  поле не передается то сервер вставляет текущее значение
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #10 - 06. Ноября 2008 :: 09:22
Печать  
Цитата:
select 
  t1.doc,
  t1.time,
  t2.rekvizit
from   t1
inner join t2 on   t2.doc=t1.doc
where
and t1.doc=значение
union
select   t2.doc,NULL,NULL from   t2

дык здесь еще хуже должно быть...
полное соединение + объединение
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #11 - 06. Ноября 2008 :: 09:24
Печать  
все... туплю
Цитата:
Где в твоём запросе задаётся период?

я думал вы додумаете

select
...
where
...
and t1.time beetwin дата1 and дата2
  
Наверх
 
IP записан
 
FAM
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 19. Мая 2006
Re: не join left
Ответ #12 - 06. Ноября 2008 :: 09:30
Печать  
select 
  t1.doc,
  t1.time,
  t2.rekvizit
from 
t1 With (Index = Название_Индекса_Doc)
left join t2 on   t2.doc=t1.doc
where
and t1.doc=значение
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: не join left
Ответ #13 - 06. Ноября 2008 :: 09:56
Печать  
мда ... выборка за 6 дней 27 секунд...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: не join left
Ответ #14 - 06. Ноября 2008 :: 10:01
Печать  
kriblya писал(а) 06. Ноября 2008 :: 09:22:
Цитата:
select  
 t1.doc,
 t1.time,
 t2.rekvizit
from   t1
inner join t2 on   t2.doc=t1.doc
where
and t1.doc=значение
union
select   t2.doc,NULL,NULL from   t2

дык здесь еще хуже должно быть...
полное соединение + объединение

полное соеденение это  full а внутреннее это inner
я предлагаю попробовать inner.
индексы уникальные или нет?
может  рассмотреть план выполнения
explain <оператор>


kriblya писал(а) 06. Ноября 2008 :: 09:56:
мда ... выборка за 6 дней 27 секунд...

а ты точно уверен что это именно время выполнения этого запроса.
с my sql у меня очень долго идет connect ( может это и особенность моей бд)

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать