Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:45 21.05.24 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Тема как да избягна подзаявка в mysql  
Автор gonzales ()
Публикувано09.08.02 16:37



ще поопростя нещата, нека са две таблици:

books sales
-------- --------
bookid ---> bookid
...... date
.........

искам да извадя тези книги, които не са продавани последните Х дни. Със подзаявка бих ко направил така:

SELECT bookid FROM books WHERE bookid NOT IN (SELECT bookid FROM sales WHERE date>'X')

Обаче както знаем MySQL не позволява подобни заявки :-(

ПОМООООООООЩ!!!



Тема Re: как да избягна подзаявка в mysqlнови [re: gonzales]  
Автор Draco (Огън и жупел)
Публикувано09.08.02 16:43



select b.bookid
from books b, sales s
where
b.bookid = s.bookid and
s.date > 'X'

Не зная какво точно искаш да постигнеш, знам, че може би не съм направил правилно заявката, ама... Надявам се сам да се сетиш нататък

Nihil tam munitum quod non expugnari pecuna possit


Тема Re: как да избягна подзаявка в mysqlнови [re: Draco]  
Автор gonzales ()
Публикувано09.08.02 16:50



Май не си ме разбрал / не съм се изразил добре. искам да получа тези, които НЕ са продавани последните дни, т.е. обратното на твойта заявка.



Тема Re: как да избягна подзаявка в mysqlнови [re: gonzales]  
Автор Draco (Огън и жупел)
Публикувано10.08.02 10:48



Е добре де .
Нали видя как можеш да получиш тези, които са продавани последните 15 дни... Обърни знака за сравнение и ... voila .
Целта ми беше да ти покажа идеята, не да ти напиша заявката

Nihil tam munitum quod non expugnari pecuna possit


Тема Re: как да избягна подзаявка в mysqlнови [re: gonzales]  
Автор salle (Един такъв)
Публикувано10.08.02 15:57



SELECT bookid FROM books WHERE bookid NOT IN (SELECT bookid FROM sales WHERE date>'X')

==

SELECT books.bookid
FROM books LEFT JOIN sales
ON books.bookid = sales.bookid

WHERE sales.bookid IS NULL
AND date > CURDATE() - INTERVAL 12 DAY;


Това разбира се е малко свободно съчинение на твоята тема - имам предвид N-те дни назад

Също така понеже двете колонки са ти с еднакво име можеш вместо

FROM books LEFT JOIN sales
ON books.bookid = sales.bookid

да използваш

FROM books LEFT JOIN sales
USING (bookid)



Редактирано от salle на 10.08.02 16:04.



Тема Re: как да избягна подзаявка в mysqlнови [re: salle]  
Автор gonzales ()
Публикувано12.08.02 15:51



благодаря, аз също си мислех, че трябва така да стане, но понеже случаят е по-сложен и не се получаваше...

значи така заявката работи, но не мога да съставя работещ пример в случая с три таблици:

books(bookid), sales(saleid,date), salesdata(saleid,bookid)

би следвало заявката да е

SELECT b.bookid FROM tblbooks AS b LEFT JOIN tblhroprodetails AS hd USING(bookid) LEFT JOIN tblhroprotokoli AS h USING(hrpid) WHERE h.hrpid IS NULL AND h.hrpdocdate>'2002-08-09' OR h.hrpdocdate IS NULL
^^^^^^^^^^^^^^^^

без тази част резултата винаги е празен, но ми трябваше доста време да се сетя. което обаче не решава проблема, защото така получавам книгите, които ВЪОБЩЕ не са продавани, а не залежалите. Явно в WHERE клаузата трябва хитрина, но н е сесащам ква да бъде

Редактирано от gonzales на 12.08.02 16:11.



Тема Re: как да избягна подзаявка в mysqlнови [re: gonzales]  
Автор salle (Един такъв)
Публикувано13.08.02 14:19



Сложи скоби навсякъде за да усетиш какъв е точно реда на AND и OR във WHERE

Можеш да си докараш адско главоболие докато схванеш как точно работи такава последователност от LEFT JOIN между няколко таблици но пък ако го разбереш можеш да правиш чудеса.

Пол Дюбоа в книгата си дава примери за това как да с ес месят повече правила във ON условието на LEFT JOIN и резултата е наистина зашеметяващ.

Честно казано обаче единственото което мога да ти препоръчам е да си направиш 3 мънички примерни таблички и да добавяш условия едно по едно и да анализираш много внимателно резултата.



Тема Re: как да избягна подзаявка в mysqlнови [re: salle]  
Автор gonzales ()
Публикувано15.08.02 18:35



ми накрая реших задачата с временна таблица и отговора с двете таблици. ма ми се щеше да я избягна.



Тема Re: :)нови [re: gonzales]  
Автор salle (Един такъв)
Публикувано15.08.02 19:02



Няма лошо. По-добре да не работи идеално, но да го разбираш напълно отколкото да имаш нещо, което върши работа ама хич не си наясно как аджеба и дали всичко е наред или само случайно ти връща правилни резултати

Е някой ден може и да разбереш временната таблица къде може да се падне като междинен резултат на някой от Join-овете и да минеш без нея ама това може и да почака нали?




*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.