Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Pokročilejší SQL dotaz

Ahoj. Mám tři tabulky.
První se jmenuje adress_book
druhá se jmenuje skupina_hlavni
a třetí se jmenuje skupina_obsah

První tabulka obsahuje emaily.
druhá obsahuje seznam zákaznických skupin
a třetí definuje, které emaily patří do jaké skupiny.

A já mám uloženo několik skupin v skupina_hlavní a v skupina_obsah mám již několik ID adres.

A nyní co zjednodušeně chci:

Chci, aby pokud je ve vybrané skupině (v skupina_obsah) nalezeno ID shodné v adress_book, aby měl nenulovou hodnotu sloupec checkbox_checked.

Zjednoduším to zadáním: Pokud edituji konkrétní zákaznickou skupinu, můžu si vybírat z tabulky adress_book všechny příjemce a přiřazovat je do této skupiny.

A v uživatelském rozhraní se zobrazuje u seznamu VŠECH adres checkbox, který je zaškrknutý v případě, že je email ve skupině. Opravdu jednoduché, ale jak na to?

Dopracoval jsem se k následujícímu dotazu:

SELECT entry_state, address_book_id as address_book_id, entry_company as entry_company, p.id_adresy checkbox_checked
FROM address_book LEFT JOIN skupina_obsah p ON p.id_adresy = address_book_id WHERE entry_state NOT LIKE ' ' and p.id_skupiny = 6 group by entry_state ORDER BY entry_company");

Tento dotaz má však tu zásadní chybu, a to ,že vybírá jen obsažené (checked) adresy.

Jak ho mám přepsat, aby vypisoval všechny adresy z adress_book a ty, které jsou zároveň obsaženy v skupina_obsah.id_adresy , aby měly sloupec checkbox_checked nenulový?

Předmět Autor Datum
Co třeba ... and coalesce(p.id_skupiny, 6) = 6 ...
Wikan 13.09.2012 20:55
Wikan
Nevím, jestli si rozumíme. Já chci jednoduše vytáhnout VŠECHNY adresy z adress_book s tím, že když b…
Flash_Gordon 13.09.2012 21:04
Flash_Gordon
Pokud použiješ left join a zároveň omezující podmínku na připojenou tabulku, tak je to prakticky ste…
Wikan 13.09.2012 21:09
Wikan
Děkuji. Funguje. Pro případ, že by někdo řešil podobnou hádanku dávám celé řešení: SELECT entry_sta…
Flash_Gordon 14.09.2012 08:20
Flash_Gordon
:-p neni nazev tématA "Pokročilejší dotaz?" - timto se odkazuji na aplikaci Siebel, která do DB spou…
AZOR 15.09.2012 20:41
AZOR
mimochodem NOT LIKE '' nedává smysl. poslední
AZOR 15.09.2012 20:43
AZOR

Nevím, jestli si rozumíme.
Já chci jednoduše vytáhnout VŠECHNY adresy z adress_book s tím, že když budou v skupina_obsah (o konkrétním id), tak bude v sloupečku checkbox_checked nenulová hodnota.

Podle manualu coalesce vrací pouze jedinou hodnotu a tak nevím, jak by mi v tom mohla být nápomocna.

Děkuji. Funguje.
Pro případ, že by někdo řešil podobnou hádanku dávám celé řešení:

SELECT entry_state, address_book_id as address_book_id, entry_company as entry_company, p.id_adresy checkbox_checked
FROM address_book LEFT JOIN skupina_obsah p ON p.id_adresy = address_book_id WHERE entry_state NOT LIKE ' ' and coalesce(p.id_skupiny, 5) = 5 group by entry_state ORDER BY entry_company

:-p neni nazev tématA "Pokročilejší dotaz?" - timto se odkazuji na aplikaci Siebel, která do DB spouští sql generované dotazy, kde si tabulky vždy označí aliasem T<cislo_tabulky> tzn T1, T2, T3.. a uz jsem videl selecty s T273 aliasem..

Zpět do poradny Odpovědět na původní otázku Nahoru