Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Mysql dotaz složitější - jde to ?

Zdar, mám tu jednu takovou složitost. Chtěl bych poskládat dotaz takto: vybere z tabulky a všechyn sloupce místo toho aby vrátil číslo (v jednom sloupci, v druhém mám druhy jeden sloupeček id druhy názvy) by vrátil název toho druhu. Jde to, nebo se to musí dělat na několikrát ? Díky za pomoc.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Pro inspiraci jeden z mých běžných dotazů (plně funkční!): SELECT NI.CisloRozhodnuti, NI.IDosoba, M…
Rce 14.09.2010 23:09
Rce
Výsledok zlého návrhu databázy...
los 15.09.2010 00:28
los
Ani taky ne. Ne vždy jde navrhnout databáze "na všechno". Návrh databáze jsem nedělal já. Je to z in… poslední
Rce 15.09.2010 01:42
Rce

Pro inspiraci jeden z mých běžných dotazů (plně funkční!):

SELECT NI.CisloRozhodnuti, NI.IDosoba, MIN(NI.Podil) AS Podil, MIN(NI.UPcislo) AS UPcislo, 
      SUM(ISNULL(Z1.Kc, 0) + ISNULL(Z2.Kc, 0) + ISNULL(Z3.Kc, 0) + ISNULL(Z4.Kc, 0) + ISNULL(Z5.Kc, 0) + ISNULL(Z6.Kc, 0) - isnull (Z7.Kc, 0)) AS Celkem
    FROM    (
            SELECT min (N.Par) as Par, N.CisloRozhodnuti, I.IDosoba, SUM(I.Pomer1 * N.Hodnota / I.Pomer2) AS Podil, MIN(N .UPcislo) AS UPcislo 
                    FROM NarPozemky_N N INNER JOIN IDOOPOZ I ON N.CisloRozhodnuti = I.CisloRozhodnuti AND N.CisloPozemku = I.CisloPozemku AND N .UPcislo = I.UPcislo
                    WHERE ' + PutUpCislo ('N', true) + ' AND (N .Par = ' + IntToStr (SrPar) + ') AND (I.Pomer2 <> 0) 
                    GROUP BY N.CisloRozhodnuti, I.IDosoba
            ) NI
    LEFT OUTER JOIN
        (SELECT IDOsoba, CisloRozhodnuti, UPcislo, Par, SUM(Kc) AS Kc FROM Blok11Zdroj GROUP BY IDOsoba, CisloRozhodnuti, UPcislo, Par) Z1
            ON NI.CisloRozhodnuti = Z1.CisloRozhodnuti AND NI.IDosoba = Z1.IDOsoba AND NI.UPcislo = Z1.UPcislo and NI.Par = Z1.Par
            LEFT OUTER JOIN
                (SELECT IDOsoba, CisloRozhodnuti, UPcislo, Par, SUM(Kc) AS Kc FROM LesyZdroj GROUP BY IDOsoba, CisloRozhodnuti, UPcislo, Par) Z2
            ON NI.CisloRozhodnuti = Z2.CisloRozhodnuti AND NI.IDosoba = Z2.IDOsoba AND NI.UPcislo = Z2.UPcislo and NI.Par = Z2.Par
            LEFT OUTER JOIN
                (SELECT IDOsoba, CisloRozhodnuti, UPcislo, Par, SUM(Kc) AS Kc FROM MZEZdroj GROUP BY IDOsoba, CisloRozhodnuti, UPcislo, Par) Z3
            ON NI.CisloRozhodnuti = Z3.CisloRozhodnuti AND NI.IDosoba = Z3.IDOsoba AND NI.UPcislo = Z3.UPcislo and NI.Par = Z3.Par
            LEFT OUTER JOIN
                (SELECT IDOsoba, CisloRozhodnuti, UPcislo, SUM(Kc) AS Kc FROM Vec11Zdroj GROUP BY IDOsoba, CisloRozhodnuti, UPcislo) Z4
            ON NI.CisloRozhodnuti = Z4.CisloRozhodnuti AND NI.IDosoba = Z4.IDOsoba AND NI.UPcislo = Z4.UPcislo
            LEFT OUTER JOIN
                (SELECT IDOsoba, CisloRozhodnuti, UPcislo, SUM(Kc) AS Kc FROM Zap11Zdroj GROUP BY IDOsoba, CisloRozhodnuti, UPcislo) Z5
            ON NI.CisloRozhodnuti = Z5.CisloRozhodnuti AND NI.IDosoba = Z5.IDosoba AND NI.UPcislo = Z5.UPcislo 
            LEFT OUTER JOIN 
                (SELECT IDOsoba, CisloRozhodnuti, UPcislo, SUM(Kc) AS Kc FROM ChybPln11Zdroj GROUP BY IDOsoba, CisloRozhodnuti, UPcislo) Z6
            ON NI.CisloRozhodnuti = Z6.CisloRozhodnuti AND NI.IDosoba = Z6.IDOsoba AND NI.UPcislo = Z6.UPcislo
            left outer join
                (SELECT MIN(PZ.UPcislo) AS UPcislo, A.IDOsoba, PZ.CisloRozhodnuti, SUM(PZ.Kc) AS Kc
                    FROM   Post11Zdroj PZ
                    INNER JOIN Post11  P ON PZ.UPcislo = P.UPcislo AND PZ.IDPrevod = P.IDPrevod AND PZ.IDosoba = P.IDosoba
                        INNER JOIN ADRESAR A ON PZ.UPcislo = A.UPcislo AND P.KlientID_Prev = A.KlientID
                    GROUP BY A.IDOsoba, PZ.CisloRozhodnuti) Z7
            on NI.CisloRozhodnuti = Z7.CisloRozhodnuti AND NI.IDosoba = Z7.IDOsoba AND NI.UPcislo = Z7.UPcislo
                         'GROUP BY NI.CisloRozhodnuti, NI.IDosoba
    HAVING (SUM(ISNULL(Z1.Kc, 0) + ISNULL(Z2.Kc, 0) + ISNULL(Z3.Kc, 0) + ISNULL(Z4.Kc, 0) + ISNULL(Z5.Kc, 0) + ISNULL(Z6.Kc, 0) - isnull (Z7.Kc, 0)) > MIN(NI.Podil) + 0.99) 

Ani taky ne. Ne vždy jde navrhnout databáze "na všechno". Návrh databáze jsem nedělal já. Je to z inventury nároků na restituci, kde bylo strašlivě moc variant - měl pole, dali za to barák + peníze nebo les, nemovitosti, prostě kvanta možností a jejich kombinace. Tento obří select vyhledával chyby v databázi tedy nepovolené kombinace nároků a plnění restitucí. Vnitřní selecty vytahují chybné věty a "obalový" select to vhodně seřadí a vysoučtuje.

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