heinetz: MySQL DELETE

Hallo Forum,

ich krieg's gerade nicht hin. Folgendes SQL-Statement funktioniert einwandfrei, um Datensätze in der Tabelle jstree\_structure zu löschen:

  
DELETE  
s1 . * ,  
c . *  
FROM `jstree_structure` s1  
LEFT JOIN `content_offline` c ON s1.site_id = c.site_id  
LEFT JOIN `jstree_structure` s2 ON s1.parent_id = s2.site_id  
WHERE (  
 s2.site_id IS NULL  
 AND s1.parent_id  
 IS NOT NULL  
)  
OR s1.parent_id =2600

Mein Versuch, gleichzeitig in der Tabelle Datensätze in der Tabelle
content\_offline zu löschen, scheitert, wenn ich es auf folgende Weise versuche:

  
DELETE  
s1 . * ,  
c . *  
FROM  
`jstree_structure` s1,  
c  
LEFT JOIN `content_offline` c ON s1.site_id = c.site_id  
LEFT JOIN `jstree_structure` s2 ON s1.parent_id = s2.site_id  
WHERE (  
 s2.site_id IS NULL  
 AND s1.parent_id  
 IS NOT NULL  
)  
OR s1.parent_id =2600

MySQL meldet:
#1066 - Not unique table/alias: 'c'

Ich habe einiges versucht:

  
DELETE  
s1,  
c  
FROM  
`jstree_structure` s1,  
c  
LEFT JOIN `content_offline` c ON s1.site_id = c.site_id  
LEFT JOIN `jstree_structure` s2 ON s1.parent_id = s2.site_id  
WHERE (  
 s2.site_id IS NULL  
 AND s1.parent_id  
 IS NOT NULL  
)  
OR s1.parent_id =2600
  
DELETE  
FROM  
`jstree_structure` s1,  
c  
LEFT JOIN `content_offline` c ON s1.site_id = c.site_id  
LEFT JOIN `jstree_structure` s2 ON s1.parent_id = s2.site_id  
WHERE (  
 s2.site_id IS NULL  
 AND s1.parent_id  
 IS NOT NULL  
)  
OR s1.parent_id =2600

... aber das haut leider auch nicht hin ;(

Warum ist hier 'c' not unique. Habe ich irgendetwas übersehen?

danke für Tipps und

beste gruesse,
heinetz

  1. Hallo,

    ich krieg's gerade nicht hin. Folgendes SQL-Statement funktioniert einwandfrei, um Datensätze in der Tabelle jstree\_structure zu löschen:

    DELETE
    s1 . * ,
    c . *
    FROM
    jstree_structure s1,
    c                                                              -- c zum 1.
    LEFT JOIN content_offline c ON s1.site_id = c.site_id        -- c zum 2.
    LEFT JOIN jstree_structure s2 ON s1.parent_id = s2.site_id
    WHERE (
    s2.site_id IS NULL
    AND s1.parent_id
    IS NOT NULL
    )
    OR s1.parent_id =2600

      
      
    
    > MySQL meldet:  
    > #1066 - Not unique table/alias: 'c'  
      
    Ja. Das springt einem direkt ins Auge. Im ersten Statement genauso wie in den folgenden.  
      
    
    > Warum ist hier 'c' not unique. Habe ich irgendetwas übersehen?  
      
    Weil Du es zweimal verwendest. In der DELETE-Klausel kannst Du bereits auf Aliasnamen zugreifen, die erst später deklariert werden. In der FROM-Klausel geht das dagegen nicht. Ich weiß auch nicht, was Du mit dem Crossjoin bezweckst. Vermutlich willst Du in der FROM-Klausel \*kein\*  
      
        `, c`{:.language-sql}  
      
    verwenden.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Hello,

      danke! Ich habe das mittlerweile anders gelöst.

      beste gruesse,
      heinetz