NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: nekolikanasobny join ze stejne tabulky

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Martin Bruna
Člen
Avatar
Martin Bruna:22.12.2015 20:08

Ahoj, tvořím dotaz, který by mi vypsal všechny poznáky i přez sdílení (poznaka muze být sdílená přímo, patřit kategorii, která je sdílena nebo uživatel patří do skupiny s kterou je poznámka nebo kategorie sdílena). Pro zatím sem sestavil funkční dotaz, ale nezdá se mi uplně nejlepší. Nešlo by to zjednodušit?
Popřípadě vyřešit úplně jinak?

SELECT note.id, note.user_id as userid FROM note
WHERE note.id IS NOT NULL
UNION
SELECT note.id, shared.to_id as userid FROM shared
LEFT JOIN note ON (shared.what_id=note.id) AND (shared.what_type="note")
WHERE note.id IS NOT NULL AND shared.to_type="user"
UNION
SELECT note.id, shared.to_id as userid FROM shared
LEFT JOIN category ON (shared.what_id=category.id) AND (shared.what_type="category")
LEFT JOIN note ON (note.category_id=category.id)
WHERE note.id IS NOT NULL AND (shared.to_type="user")
UNION
SELECT note.id, user_group.user_id as userid FROM user_group
LEFT JOIN group_of_users ON (group_of_users.id=user_group.group_id)
LEFT JOIN shared ON (shared.to_id=group_of_users.id) AND (shared.to_type = "group")
LEFT JOIN category ON (shared.what_id=category.id) AND (shared.what_type = "category")
LEFT JOIN note ON (note.category_id=category.id)
WHERE note.id IS NOT NULL
UNION
SELECT note.id, user_group.user_id as userid FROM user_group
LEFT JOIN group_of_users ON (group_of_users.id=user_group.group_id)
LEFT JOIN shared ON (shared.to_id=group_of_users.id) AND (shared.to_type = "group")
LEFT JOIN note ON (shared.what_id=note.id) AND (shared.what_type = "note")
WHERE note.id IS NOT NULL;
Editováno 22.12.2015 20:10
 
Odpovědět
22.12.2015 20:08
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.