|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
WHERE ALL(story_status_sid)=2...MySQL въпрос.
|
|
Автор |
Dakota (erotoman) |
Публикувано | 07.02.04 19:04 |
|
Имам си таблица story_department:
CREATE TABLE `story_department` (
`story_sid` bigint(20) unsigned NOT NULL default '0',
`department_sid` mediumint(8) unsigned NOT NULL default '0',
`story_status_sid` tinyint(3) unsigned NOT NULL default '1',
UNIQUE KEY `story_sid` (`story_sid`,`department_sid`),
KEY `story_status_sid` (`story_status_sid`)
) TYPE=MyISAM
Тя ми се явява връзка между таблицата story и таблицата department, като освен връзка, съдържа в себе си story_status_sid, което е 1 или 2, контекстно на story и department.
Да речем, че в таблицата имам следните данни:
story_sid | department_sid | story_status_sid
1 1 1
1 2 1
1 3 2
2 2 2
2 3 2
...
Трябва ми такава заявка, която да ми изкара всички distinct story_sid, за които всички story_status_sid=2. Т.е. в дадения пример да ми изкара само story_sid=2.
Измислих някакъв hack с:
...GROUP BY
s.story_sid
HAVING
AVG(story_status_sid)=2
Обаче това не ми изглежда никак добре. Има ли по-чисто решение?
Версията ми е 4.0.17.
Everything louder than everything else...
| |
Тема
|
Re: WHERE ALL(story_status_sid)=2...MySQL въпрос.
[re: Dakota]
|
|
Автор |
salle (един такъв) |
Публикувано | 08.02.04 12:02 |
|
"Трябва ми такава заявка, която да ми изкара всички distinct story_sid, за които всички story_status_sid=2"
SELECT DISTINCT story_sid
FROM story_department
WHERE story_status_sid = 2;
| |
Тема
|
Re: WHERE ALL(story_status_sid)=2...MySQL въпрос.
[re: salle]
|
|
Автор | бaй Любo (Нерегистриран) |
Публикувано | 08.02.04 22:56 |
|
Това ще върне и тези стор_ид за които има и статус=2 и статус=1, например стор_сид 1 в примера на дакота:
story_sid | department_sid | story_status_sid
1 1 1
1 2 1
1 3 2
Те трябва да се изключат ако правилно съм разбрал орг. въпрос:
SELECT DISTINCT а.story_sid
FROM story_department а
WHERE а.story_status_sid = 2
/* дотук добре -- както го беше започнал салле */
and not exists (select 1 from story_department b
where а.story_sid =b.story_sid
and b.story_status_sid != 2);
само дето не знам дали в мъсял има correlated subqueries.
| |
Тема
|
да, правилно си разбрал
[re: бaй Любo]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 09.02.04 10:34 |
|
Лошото е че 4.0.17 не поддържа вложени селекти.
А начина, по-който съм го реализирал в момента е без WHERE story_status_sid=2, за да в общия result set да имам и 1, по този начин чрез AVG проверявам всички...само дето не съм сигурен дали при прекалено големи стойности, да речем 1х1 и 2000х2 няма да ми изкара AVG=2.
Everything louder than everything else...Редактирано от Dakota на 09.02.04 11:41.
| |
Тема
|
Re: eх тези загадки ...
[re: Dakota]
|
|
Автор |
salle (един такъв) |
Публикувано | 09.02.04 14:53 |
|
Аз ти отговорих на въпроса както ге беше задал.
Задавай си въпросите така, че да не се налага да ти отговарят с "Ако правилно съм те разбрал"
Не си новобранец в dir.bg все пак
| |
Тема
|
Re: да, правилно си разбрал
[re: Dakota]
|
|
Автор | бaй Любo (Нерегистриран) |
Публикувано | 09.02.04 16:31 |
|
ми що не замениш средното с мин и макс:
...GROUP BY
s.story_sid
HAVING
/* AVG(story_status_sid)=2 */
min(story_status_sid)=2 and
max(story_status_sid)=2
| |
Тема
|
Re: eх тези загадки ...
[re: salle]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 09.02.04 17:23 |
|
"Трябва ми такава заявка, която да ми изкара всички distinct story_sid, за които всички story_status_sid=2."
Второто "всички" даже беше и болднато...
Ta, не се измъквай, а кажи сега има ли по-читав вариант за тази заявка?
Everything louder than everything else...
| |
Тема
|
Re: да, правилно си разбрал
[re: бaй Любo]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 09.02.04 17:25 |
|
Да, това е сигурен вариант...още повече за моя частен случай 2 е най-високата стойност, така че мога и само min() да използвам.
И все пак, продължавам да си мисля, че би трябвало да има и друго решение...пък може и да няма, ама съм длъжен да попитам все пак.
Everything louder than everything else...
| |
Тема
|
Re: ами да де ...
[re: Dakota]
|
|
Автор |
salle (един такъв) |
Публикувано | 09.02.04 18:49 |
|
Всички story_id за които всички story_status_sid=2 се превежда точно като
SELECT stort_id FROM tbl WHERE story_status_sid = 2;
| |
Тема
|
Re: а иначе ...
[re: salle]
|
|
Автор |
salle (един такъв) |
Публикувано | 09.02.04 18:54 |
|
SELECT story_id, COUNT(DISTINCT story_status_sid) AS dc FROM tbl GROUP BY story_id HAVING dc = 1;
може да те наведе на някакви идеи
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|