Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno SQL - spojenie dvoch tabuliek, z druhej posledné záznamy

Mám tabuľku tab1 a tabuľku tab2, ktorá odkazuje na tab1 pomocou výrazu

tab2.tab1_id = tab1.id

Potrebujem prepojiť tieto dve tabuľky tak, aby položka tab2.cas bola najvyššia pre každé tab2.tab_id

Takže mám:

select * from tab1 left join tab2 on tab1.id=tab2.tab1_id group by tab1.id

Týmto dosiahnem, že mi zobrazí všetky riadky z tab1 a ak neexistuje nijaký záznam podľa prepojenia, tak v druhej časti je null, to je v poriadku, lenže záznam z tab2 je náhodný a nie taký, čo má najvyššiu položku tab2.cas.

Toto mi nepomáha:

select * from tab1 left join tab2 on tab1.id=tab2.tab1_id where tab2.cas=max(tab2.cas) group by tab1.id
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
CREATE VIEW V_TAB2 AS SELECT TAB1_ID, MAX(CAS) AS CAS FROM TAB2 GROUP BY TAB1_ID; a potom SELECT *…
wam_Spider007 03.02.2010 20:07
wam_Spider007
SELECT *, MAX(cas) AS maxcas FROM tab2 GROUP BY tab1_id; HAVING cas=maxcas Dáva prázdnu tabuľku. I…
msx. 03.02.2010 20:27
msx.
no tento script je dost nespravny....za normalnych okolnosti by dokonca jeho spustenie mali vypisat…
wam_Spider007 03.02.2010 20:30
wam_Spider007
Ide to, presne to som potreboval, ale keď som chcel pridať počet príspevkov, tak to už neviem zas do…
msx. 03.02.2010 20:38
msx.
to uz asi jednym prikazom neurobis... musis si urobit view, ktore ti da pre kazde ID pocet riadkov…
wam_Spider007 03.02.2010 20:43
wam_Spider007
Vyzerá, že to ide dobre, ale potrebujem, aby sa zobrazili všetky riadky z TAB1, aj tie, pre ktoré ne…
msx. 03.02.2010 21:01
msx.
takze final...snad :-D SELECT * FROM TAB1 T1 LEFT JOIN TAB2 T2 ON T1.ID = T2.TAB1_ID LEFT JOIN V_PR…
wam_Spider007 03.02.2010 21:07
wam_Spider007
Beriem späť. Keď som si to celé pozeral v phpMyAdmine, tak sa mi zdalo, že mám zle zátvorku. Pozrel…
msx. 03.02.2010 21:13
msx.
no problem :-) ked si napisal, ze aj tak nejde tak uz som zapinal mysql, ze si to nasimulujem....nas…
wam_Spider007 03.02.2010 21:17
wam_Spider007
Práve som to otestoval, doplnil ďalšie podmienky a funguje bezchybne. Ďakujem, označujem za vyriešen… poslední
msx. 03.02.2010 21:41
msx.
SELECT *, MAX(cas) AS maxcas
FROM tab2
GROUP BY tab1_id;
HAVING cas=maxcas

Dáva prázdnu tabuľku. Ide o to, že potrebujem aj všetky stĺpce z tab2.

Doplnenie:
Ide o komentáre k témam. Témy sa musia zobraziť všetky a vedľa každej aj dátum a čas a meno používateľa posledného príspevku, tab1 je téma, tab2 sú komentáre.

no tento script je dost nespravny....za normalnych okolnosti by dokonca jeho spustenie mali vypisat chybu
v GROUP BY klauzule musi byt rovnaky pocet neagregovanych poli ako je v SELECT liste.

ak potrebujes aj stlpce z TAB2 tak skus ten skript, ktory som poslal posledny

Ide to, presne to som potreboval, ale keď som chcel pridať počet príspevkov, tak to už neviem zas dokopať do normálneho riešenia.

Proste ešte jeden stlpec z TAB2, kde bude počet záznamov vyhovujúcich podmienke TAB1.ID=TAB2.TAB1_ID.

to uz asi jednym prikazom neurobis...

musis si urobit view, ktore ti da pre kazde ID pocet riadkov

CREATE VIEW V_PRIADKOV
AS
SELECT TAB1_ID, COUNT(*)
FROM TAB2
GROUP BY TAB1_ID;

a select potom este doplnis

SELECT *
FROM TAB1 T1
LEFT JOIN TAB2 T2
ON T1.ID = T2.TAB1_ID
LEFT JOIN V_PRIADKOV PR
ON PR.TAB1_ID = T1.ID
WHERE T2.CAS = (SELECT MAX(CAS) FROM TAB2 WHERE TAB1_ID = T1.ID)

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