Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno [MSSQL] SELECT

Ahoj potřebuju aby jste mi někdo zachránil život.. :)

ukol: Vyberte zákazníky, kteří si zarezervovali všechny lodě zelenné barvy
(Definovat SQL dotazem)

Tabulky
lod id_l,jmeno_l, typ_lodi,barva,pocet_mist
zakaznik id_z,jmeno_z,adresa
rezervace id_z,id_l, datum, cas

tzn. jestli bude lod id. jedna zelené barvy a lod id. dve zelené barvy a zakaznik č.1 bude mít v rezervaci lod č. 1 i č.2 aby dotaz vrátil zakaznika cislo jedna.. :)

Děkuji všem předem.. :)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tá úloha sa mi nezdá celkom jednoznačne zadaná, ale ak chceš vybrať všetkých zákazníkov, ktorí si re… nový
los 20.02.2008 18:42
los
Já potřebuju zákazníka kteří si vybrali všechny zelené lodě ne jenom jednu.. :) nový
Marti 20.02.2008 18:49
Marti
Tak to je ten posledný select. nový
los 20.02.2008 19:12
los
Ještě jedna maličkost ještě bych k tomu poslednímu selektu potřeboval vybrat jméno zákazníka a já ne… nový
Martin M 20.02.2008 19:22
Martin M
SELECT * FROM zakaznik WHERE id_z IN ( SELECT id_z FROM rezervace LEFT JOIN lod ON lod.id_l=rezervac… nový
los 20.02.2008 19:32
los
Já to teda na konec upravil takhle,a výsledek máme stejný SELECT rezervace.id_z,z.jmeno_z FROM reze… poslední
Martin M 20.02.2008 19:37
Martin M

Tá úloha sa mi nezdá celkom jednoznačne zadaná, ale ak chceš vybrať všetkých zákazníkov, ktorí si rezervovali iba zelené lode, tak môžeš použiť niečo takéto:

SELECT id_z FROM rezervace
LEFT JOIN lod ON lod.id_l=rezervace.id_l
GROUP BY id_z
HAVING SUM(CASE barva WHEN 'zelena' THEN 0 ELSE 1 END)=0

prípadne:

SELECT DISTINCT id_z FROM rezervace
WHERE id_z NOT IN (
	SELECT id_z FROM rezervace
	LEFT JOIN lod ON lod.id_l=rezervace.id_l
	WHERE barva<>'zelena'
)

Alebo ak chceš vybrať zákazníkov, ktorí si rezervovali všetky dostupné lode zelenej farby, tak napr. takto:

SELECT id_z FROM rezervace
LEFT JOIN lod ON lod.id_l=rezervace.id_l
GROUP BY id_z, barva
HAVING barva='zelena' AND COUNT(*)=(SELECT COUNT(*) FROM lod WHERE barva='zelena')

Edit: Tie selecty v príspevkoch nado mnou vyberú zákazníkov, ktorí si rezervovali aspoň jednu zelenú loď (nie všetky).

Ještě jedna maličkost ještě bych k tomu poslednímu selektu potřeboval vybrat jméno zákazníka a já nevim jak to tam zakomponovat ptž hned bude LEFT JOIN na jinou tabulku když se budu snažit INNER JOIN zakaznik kvůli tomu jmenu :(

Já to teda na konec upravil takhle,a výsledek máme stejný

SELECT rezervace.id_z,z.jmeno_z FROM rezervace
LEFT JOIN lod ON lod.id_l=rezervace.id_l INNER JOIN zakaznik as z ON rezervace.id_z = z.id_z
GROUP BY rezervace.id_z, barva,z.jmeno_z
HAVING barva='zelená' AND COUNT(*)=(SELECT COUNT(*) FROM lod WHERE barva='zelená')

Dík.. Aspoň, že mám nějaký řešení. Dostal jsem teda info ze zhora že to mám dělat přes EXISTS někde ale fakt nevim jak to bylo myšlený.. :(

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