subselect & mehrere werte

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • subselect & mehrere werte

    mein problem:
    postgres datenbank, ich hab de nen select,
    SELECT *,(SELECT bla FROM andereTabelle WHERE a=b) as irgendwas FROM...

    ...und der läuft auch super, solange ich in dem subselect nur 0- oder 1- ergebnis bekomme...
    wenn es mehr ist, sagt er mir
    "More than one tuple returned by a subselect used as an expression".
    ...will ich ja auch haben, nur müsste ich ihm irgendwie sagen, daß 'irgendwas' nen array sein soll oder so...
    ich hoffe, da kann mir jemand helfen...
    eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

  • #2
    So sieht das ganze in MySQL aus, und genau so sollte es auch in Postgres funktionieren:

    SELECT t1.*, t2.bla AS irgendwas
    FROM eineTabelle AS t1
    LEFT JOIN andereTabelle AS t2 ON t1.a=t2.b

    oder (etwas langsamer):

    SELECT t1.*, t2.bla AS irgendwas
    FROM eineTabelle AS t1, andereTabelle as t2
    WHERE t1.a=t2.b

    Schau doch mal ins Handbuch.

    Unterschied zwischen dem "left join" und "unconstricted join":
    Im zweiten Fall werden nur Zeilen aus Tabelle1 zurückgegeben, wenn ein passender Datensatz in Tabelle2 existiert. Beim left join dagegen bekommen die Felder aus Tabellen ohne passenden Datensatz den Wert NULL.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      ja, danke erstmal. aber das ist aber nicht 100%ig das was ich wollte. jetzt bekomm ich ja die datensätze
      mehrfach wenn mehrere 'irgendwas' vorhanden sind. am liebsten wär mir aber ein datensatz, wo dann
      bei 'irgendwas' die verschieden werte enthalten sind. am liebsten nen array falls das geht, aber nen
      string würde mir auch reichen (wie ich ihn z.B bei array_dims() bekomme).
      eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

      Kommentar


      • #4
        wenn ich dich richtig verstehe:
        Code:
        tabelle1:	blah	a
        	A	1
        	B	2
        tabelle2:	fasel	b
        	a1	1
        	a2	1
        	b1	2
        Ergebnis:
        blah=>A, a=>1, irgendwas=>a1,a2
        blah=>B, a=>2, irgendwas=>b1
        Ich weiß von keinem SQL-Dialekt, der sowas kann.
        Aber du kannst nach dem join in einer Schleife die entsprechenden Datensätze zusammenbauen:
        PHP-Code:
        $res pg_exec($conn"SELECT t1.*, t2.fasel AS tmp
          FROM eineTabelle AS t1
          LEFT JOIN andereTabelle AS t2 ON t1.a=t2.b
          ORDER BY t1.a"
        );
        $tab1a $n = -1$data = array();
        for (
        $i=0$row pg_fetch_array($res$iPGSQL_ASSOC); $i++)
        {
          if (
        $tab1a != $row['a'])
          {
            
        $row[$n][b][] = 
            
        $tab1a $row['a'];
            
        $n++;
            
        $data[$n] = $row;
            
        $data[$n]['irgendwas'] = array();
          }
          
        $data[$n]['irgendwas'][] = $row['tmp']

        Besonders wichtig dabei: die order-by-Klausel in der Query. Ohne die macht der Rest des Codes Unfug.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar

        Lädt...
        X