hans: SQL-Abfrage

Hallo,

kann mir jemand sagen, warum das nicht funktioniert?

UPDATE contents SET vater\_ID = '19' WHERE id = '4' AND id = '6' AND id = '7' AND id = '8' AND id = '9'

vielen Dank

  1. Halihallo hans

    kann mir jemand sagen, warum das nicht funktioniert?

    Wenn es nicht funktioniert, gibt es eine Fehlermeldung, die du uns
    vorenthälst.

    UPDATE contents SET vater\_ID = '19' WHERE id = '4' AND id = '6' AND id = '7' AND id = '8' AND id = '9'

    ID klingt für mich nach Primär-Schlüssel. Ein PRIMARY KEY ist UNIQUE
    und kommt somit nur einmal vor; was passiert also deiner Meinung,
    wenn dieser unique Wert jeweils 4 _und_ 6 _und_ 7 ... annehmen soll.
    Ist doch ein Wiederspruch zur Eindeutigkeit selber. Du wolltest
    wahrscheinlich OR verwenden.

    Viele Grüsse

    Philipp

    1. hi,

      ID klingt für mich nach Primär-Schlüssel. Ein PRIMARY KEY ist UNIQUE
      und kommt somit nur einmal vor;

      selbst wenn nicht, dürfte es idR. unsinn sein, von _einer_ spalte zu verlangen, mehrere werte gleichzeitig anzunehmen.

      gruss,
      wahsaga

      1. Halihallo wahsaga

        ID klingt für mich nach Primär-Schlüssel. Ein PRIMARY KEY ist UNIQUE
        und kommt somit nur einmal vor;

        selbst wenn nicht, dürfte es idR. unsinn sein, von _einer_ spalte zu verlangen, mehrere werte gleichzeitig anzunehmen.

        Zu meiner Kenntnisnahme: [pref:t=76438&m=440321]

        :-)    .oO der Verfall beginnt Oo.

        Viele Grüsse

        Philipp

      2. Hallo,

        also wenn ich euch richtig verstehe, muss ich für jede zeile ne eigene SQL-Abfrage machen? Scheiße .... ich habe hier 600 zeilen, das muss doch auch leichter gehen?

        gruß hansi

        1. Halihallo hans

          also wenn ich euch richtig verstehe, muss ich für jede zeile ne eigene SQL-Abfrage machen? Scheiße .... ich habe hier 600 zeilen, das muss doch auch leichter gehen?

          Ja, ersetze AND durch OR und befasse dich mit bool'scher und
          relationaler Algebra. So einfach ist das :-)

          Viele Grüsse

          Philipp

          1. hallo philipp,

            ok, du hast gewonnen. habe es mit dem or versucht und das klappt wunderbar. vielen dank für deine unterstützung!

            gruß hansi

            1. Hi,

              man sollte den sprachlichen Gebrauch von UND / ODER nicht mit dem logischen Gebrauch von dergleichen verwechseln ;)

              Du willst zwar 4 und 6 und 7 und 8 und 9 aber das Feld hat nur einen Wert und kann daher nur 4 order 6 oder 7 oder 8 oder 9 sein ;)

              kannst es dir aber auch ganz einfach machen:

              UPDATE contents SET vater\_ID = '19' WHERE id IN (4,6,7,8,9);

              Gruss,
              Stefan

        2. Hallo,

          also wenn ich euch richtig verstehe, muss ich für jede zeile ne eigene SQL-Abfrage machen? Scheiße .... ich habe hier 600 zeilen, das muss doch auch leichter gehen?

          Formuliere auch sprachlich korrekt. Du möchtest die Datensätze mit id="x" UND die Datensätze mit id="y" beeinflussen, also möchtest Du alle Datensätze beeinflussen, die entweder id="x" ODER id="y" haben.

          viele Grüße

          Axel

    2. Halihallo hans

      ID klingt für mich nach Primär-Schlüssel. Ein PRIMARY KEY ist UNIQUE
      und kommt somit nur einmal vor; was passiert also deiner Meinung,
      wenn dieser unique Wert jeweils 4 _und_ 6 _und_ 7 ... annehmen soll.
      Ist doch ein Wiederspruch zur Eindeutigkeit selber. Du wolltest
      wahrscheinlich OR verwenden.

      Zudem hat das noch nicht einmal etwas mit Primary Key und Unique zu
      tun. Ein Attribut hat nunmal ausschliesslich nur einen Wert, dass
      die Datenbank hier absolut keinen zutreffenden Datensatz auszugeben
      vermag wäre für mich die einzig logische Konsequenz; ansonsten ist
      deine Datenbank defekt.

      Viele Grüsse

      Philipp

      1. use Mosche;

        Ein Attribut hat nunmal ausschliesslich nur einen Wert, dass
        die Datenbank hier absolut keinen zutreffenden Datensatz auszugeben
        vermag wäre für mich die einzig logische Konsequenz; ansonsten ist
        deine Datenbank defekt.

        Aber nur aufgrund der Forderungen der ersten Normalform (Attribute müssen atomar sein).
        Ich weiss leider gerade nicht, wie ein DBMS auf Mengen reagiert (ob der Operator = dafür überhaupt definiert ist), aber man könnte dies so implemetieren, dass tatsächlich
        id = 4 and id = 6 (das gleiche wie id = {4, 6} bzw eher {4, 6} C id (C hierbei "Teilmenge von"))

        use Tschoe qw(Matti);

        --
        neues Selftreffen?
        http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    3. hallo Philipp,

      warum ist das ein widerspruch. es ist richtig id ist ein primärschlüssel. in meiner tabelle sind zwanzig einträge und ich möchte alle einträge mit dem primärschlüssel 4,6,7,8,9 bearbeiten und diesen den wert 19 im feld vater_ID zuweisen. vom verständnis denke ich sicher nachvollziehbar, aber die abfrage scheint so nicht richtig zu sein. wo liegt deiner meinung nach der fehler?

      gruß hansi

      1. Halihallo hansi

        warum ist das ein widerspruch. es ist richtig id ist ein primärschlüssel. in meiner tabelle sind zwanzig einträge und ich möchte alle einträge mit dem primärschlüssel 4,6,7,8,9 bearbeiten und diesen den wert 19 im feld vater_ID zuweisen. vom verständnis denke ich sicher nachvollziehbar, aber die abfrage scheint so nicht richtig zu sein. wo liegt deiner meinung nach der fehler?

        OR, nicht AND.

        Du willst die Datensätze mit der ID 4 _oder_ 6 _oder_ ... ändern,
        nicht die Datensätze, deren ID 4 _und_ 6 _und_ ... ist.
        Ein Datensatz wird nur selektiert, wenn die WHERE-Bedingung wahr ist.
        Eine WHERE-Bedinung der Form "id=4 AND id=5" kann _nie_ wahr sein,
        dehalb werden keine Datensätze selektiert und deshalb wird auch nix
        geändert.

        Viele Grüsse

        Philipp

        1. hallo philipp

          warum möchtest du mir unbedingt was einreden?  :-)  *gg nein, ich möchte die datensätze mit der ID 4 und 6 und 7 ... in vater_ID den gleichen Wert zuweisen. geht das?

          1. hi,

            warum möchtest du mir unbedingt was einreden?  :-)

            und warum möchtest du dich absolut lernresistent anstellen, anstatt endlich mal den unterschied zwischen einem _logischen_ UND oder ODER zu begreifen ...?

            gruss,
            wahsaga

            1. Hallo,

              anstatt endlich mal den unterschied zwischen einem _logischen_ UND oder ODER zu begreifen ...?

              Ähm?
              Den Unterschied _zwischen_ einem Etwas _oder_ einem anderen Etwas?
              Du meinst den Unterschied zwischen einem logischen UND _und_ einem logischen ODER.
              *scnr*

              viele Grüße

              Axel

      2. warum ist das ein widerspruch. es ist richtig id ist ein primärschlüssel. in meiner tabelle sind zwanzig einträge und ich möchte alle einträge mit dem primärschlüssel 4,6,7,8,9 bearbeiten und diesen den wert 19 im feld vater_ID zuweisen. vom verständnis denke ich sicher nachvollziehbar, aber die abfrage scheint so nicht richtig zu sein. wo liegt deiner meinung nach der fehler?

        Aus DIESEM Zusammenhang:

        UPDATE contents SET vater\_ID = '19' WHERE id IN (4,6,7,8,9);

    4. Hallo Philipp,

      UPDATE contents SET vater\_ID = '19' WHERE id = '4' AND id = '6' AND id = '7' AND id = '8' AND id = '9'

      ID klingt für mich nach Primär-Schlüssel. Ein PRIMARY KEY ist UNIQUE
      und kommt somit nur einmal vor; was passiert also deiner Meinung,
      wenn dieser unique Wert jeweils 4 _und_ 6 _und_ 7 ... annehmen soll.
      Ist doch ein Wiederspruch zur Eindeutigkeit selber.

      Richtig, allerdings ist das nicht nur bei einem Primär-Schlüssel so. Meiner Ansicht nach kann _kein_ Feld innerhalb eines Datensatzes _mehrere_ Inhalte gleichzeitig haben, oder? ;-)) Die SQL-Formulierung

      ... WHERE Feld1="Wert" AND Feld1="anderer Wert"

      führt _immer_ zu einer leeren Datensatzmenge.

      Du wolltest wahrscheinlich OR verwenden.

      Ja, und die Back-Ticks weglassen.

      viele Grüße

      Axel