Announcement

Collapse
No announcement yet.

DELETE unter Bedingung von...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DELETE unter Bedingung von...

    Hi,
    ich habe zwei Tabellen, aus einer muss ich einen Datensatz anhand der Datensatz ID löschen. Allerdings möchte ich vorher prüfen, ober eine Bedingung gegeben ist.

    Es handelt sich um ein Einladungsystem wo ich eine Partnerschaft auch wieder beendet werden kann. Nun weis ich im vorhinein nicht ob derjerenige, der die Partnerschaft kündigen will der Einladene oder Eingeladene war.

    Vorab erst mal ein Bild zur Verdeutlichung:


    Uploaded with ImageShack.us

    Ich möchte sicherstellen das die cust_id (tabelle2) wirklich teil der Partnerschaft (tabelle1). dafür müsste ich zwei tabellenfelder gleichzeitig prüfen.

    Hier einmal mein Code:
    PHP Code:
    DELETE FROM tabelle1 WHERE id=AND (SELECT FROM tabelle2 CROSS JOIN tabelle1 WHERE tabelle2.lizenz 'xxxxx' AND (tabelle1.receiver_id tabelle2.cust_id OR tabelle1.sender_id tabelle2.cust_id)) 
    Leider bekomme ich nur folgenden Fehler zurück:
    PHP Code:
    #1241 - Operand should contain 1 column(s) 
    Kann mir jemand weiterhelfen?
    Gruß Peter

  • #2
    Die Fehlermeldung ist doch ganz klar-> das Subselect in der WHERE-Klausel gibt mehr als EINE Spalte zurück
    Anderst gesagt: das Subselect als Operand DARF nur EINE Spalte zurückgeben.

    Code:
    ...
    (SELECT * FROM tabelle2 
    ...
    SELECT * ist somit nicht richtig und verursacht den Fehler

    Comment


    • #3
      Ich habe es nun mal wie folgt umgestellt:
      PHP Code:
      DELETE FROM tabelle1 WHERE id=AND (SELECT tabelle2.cust_id FROM tabelle2 CROSS JOIN tabelle1 WHERE tabelle2.lizenz 'xxxxx' AND (tabelle1.receiver_id tabelle2.cust_id OR tabelle1.sender_id tabelle2.cust_id)) 
      Und nun bekomme ich den nächsten fehler:
      PHP Code:
      #1093 - You can't specify target table 'tabelle1' for update in FROM clause 

      Comment


      • #4
        Naja, es ist eben nicht erlaubt, bei einem DELETE oder UPDATE auf eine Tabelle diese in einem weiteren Subquery zub referenzieren.

        Auch wenn ich dein Vorgehen nicht so richtig durchschaue, dennoch ein Lösungsansatz:
        Code:
          DELETE t1 FROM tabelle1 t1
          JOIN (SELECT cust_id FROM tabelle2 WHERE lizenz ='lizens1') t2
          ON t2.cust_id=t1.sender_id OR t2.cust_id=t1.receiver_id
          WHERE t1.id=8

        Comment


        • #5
          Super danke Dir, genau das wars

          Comment

          Working...
          X