maqui: Verschachtelte Abfragen

Wie sind solche Unterabfragen mit MySQL möglich? (phpmyadmin hängt sich bei den Klammern auf)

UPDATE nutzer
SET jhrggID=(SELECT jhrggID
 FROM studenten)
WHERE ID = (SELECT ID
 FROM studenten)

  1. Hallo maqui,

    Wie sind solche Unterabfragen mit MySQL möglich?
    UPDATE nutzer
    SET jhrggID=(SELECT jhrggID
    FROM studenten)
    WHERE ID = (SELECT ID
    FROM studenten)

    Nein. Auch nicht in SQL.

    In SQL sowie MySQL ab 4.1 ist folgendes möglich, das nennt sich Subselect.

    SELECT * FROM a WHERE a.b IN (SELECT b FROM c)

    Bringt Dir allerdings nicht viel, da Du es nicht innerhalb einer Update-Zuweisung durchführen darfst.

    Außerdem unterstützt MySQL 3 folgendes:

    INSERT INTO a (b, c) SELECT b, c FROM hallo

    Mich würde also nicht wundern, wenn

    REPLACE INTO nutzer (ID, jhrggID) SELECT ID, jhrggID FROM studenten

    funktionieren würde. (bin zu faul nachzuschlagen)

    Näheres im MySQL-Handbuch.

    Viele Grüße,
    Christian

    1. Danke!!! Werd's mal probieren!

    2. Hallo Christian

      SELECT * FROM a WHERE a.b IN (SELECT b FROM c)

      Hilfe! Das ist alles was mir 4.1 bringt? Ich dachte auch ein
      SELECT
      FROM
      WHERE a = (SELECT FROM WHERE)
      würde gehen...

      Junge junge, wie schwer ist es eigentlich das zu programmieren, die IBM-DB2 unterstützt das schon seit Jahren, wie soll ich bloß jemals meine JOINS uns Abfragen optimieren wenn ich in MySQL arbeite.
      Bei Access habe ich's ja hingenommen, aber ich dachte hier wird das bald auch mal was...

      Rouven

      1. Hallo Rouven,

        Hilfe! Das ist alles was mir 4.1 bringt? Ich dachte auch ein
        SELECT
        FROM
        WHERE a = (SELECT FROM WHERE)
        würde gehen...

        Kann sein, dass es mit = auch geht, aber laut SQL-Standard ist - meiner Kenntnis nach - nur IN erlaubt. Ansonsten - wo ist, außer, dass Du statt IN das Gleichheitszeichen verwendet hast, der Unterschied zwischen meinem Statement und Deinem?

        Viele Grüße,
        Christian

        1. Hi Christian

          Kann sein, dass es mit = auch geht, aber laut SQL-Standard ist - meiner Kenntnis nach - nur IN erlaubt. Ansonsten - wo ist, außer, dass Du statt IN das Gleichheitszeichen verwendet hast, der Unterschied zwischen meinem Statement und Deinem?

          Ein grosser, IN wäre auch noch richtig, wenn mehrere Records gefunden werden in der Unterabfrage, bei = hingegen ist das ein Fehler. Das in SQL nur IN mit Subselects erlaubt ist, wäre mir neu, es müsste so ziemlich überall gehen. EXISTS gibt es ja auch noch...

          Gruss Daniela

          --
          Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
          Selfcode: sh:) fo:) ch:) rl:) br:> n4:| ie:{ mo:) va:) de:] zu:} fl:( ss:) ls:&