Dengue: MySQL

Hallo,
ich probiere nun schon seit einer Weile ohne Erfolg, folgende SQL-Anweisung mit Joins so umzuformen, dass die Unterabfrage wegfällt:

SELECT ID  
FROM t1  
WHERE t1.ID != ALL(SELECT BUID FROM t1 WHERE BUID != '')

Ich möchte nämlich, dass die Abfrage auch auf Servern mit einer älteren Version funzt.
Fällt euch dazu was ein?

Danke für eure Mühe.

MfG
Dengue

  1. Hallo,

    ich probiere nun schon seit einer Weile ohne Erfolg, folgende SQL-Anweisung mit Joins so umzuformen, dass die Unterabfrage wegfällt:

    SELECT ID

    FROM t1
    WHERE t1.ID != ALL(SELECT BUID FROM t1 WHERE BUID != '')

      
    ich vermute, Du suchst einen Selfjoin in der Form als OUTER JOIN mit der Prüfung auf IS NULL.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Hello,

      ich vermute, Du suchst einen Selfjoin in der Form als OUTER JOIN mit der Prüfung auf IS NULL.

      *args* ich sollte genauer hingucken != ALL ist selbstverständlich was völlig anderes als = ALL.

      MfG
      Rouven

      --
      -------------------
      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
      We found ourselves looking upon a familiar sight. We were home. How do you pick up the threads of an old life? How do you go on... when in your heart you begin to understand... there is no going back? There are somethings that time cannot mend... some hurts that go too deep... that have taken hold.  --  The Lord of the Rings: The Return of the King (Peter Jackson)
      1. Super, vielen Dank. Es funzt. So ähnlich hatte ich es auch, nur dass ich in der where-Klausel die ID und nicht die BUID auf NULL geprüft habe. Wie dumm von mir. Da kann das ja gar nicht gehen.

        MfG
        Dengue

  2. yo,

    ich probiere nun schon seit einer Weile ohne Erfolg, folgende SQL-Anweisung mit Joins so umzuformen, dass die Unterabfrage wegfällt:

    mit Joins läßt sich nicht alles abbilden. liegen den besondere gründe vor, dass es auf älteren servern auch laufen soll ?

    aber in deinem falle gibt es zum glück eine lösung, OUTER JOIN ist dein freund. wobei mir noch nicht ganz klar ist ob es sich bei dir um einen selfjoin handelt oder um zwei verschiedene tabellen, weil du sich gleich benanntn hast. aber ich gehe mal von einem selfjoin aus.

    SELECT tab1.*
    FROM tabelle1 tab1
    LEFT JOIN tabelle1 tab2 ON tab1.id = tab2.buid
    WHERE tab2.buid IS NULL
    ;

    Ilja

  3. Hello,

    SELECT ID

    FROM t1
    WHERE t1.ID != ALL(SELECT BUID FROM t1 WHERE BUID != '')

                    ^^^^^^  
    das ist dein Problem, was sich mit einem JOIN nur sehr unschön lösen lässt, weil der JOIN selbst nicht weiß, wieviel ALL ist.  
    Was mit dazu nur einfällt ist:  
    (1) INNER JOIN, damit nur paarweise Übereinstimmungen gelten  
    (2) GROUP BY ID  
    (3) HAVING COUNT(ID) = Anzahl der Datensätze in der anderen Tabelle die relevant sind als korrelierte Unterabfrage.  
      
    Aber in Kurz: du wirst Spaß kriegen...  
      
    MfG  
    Rouven  
    
    -- 
    \-------------------  
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))  
      
    I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
    
  4. Hallo,

    Ich möchte nämlich, dass die Abfrage auch auf Servern mit einer älteren Version funzt.
    Fällt euch dazu was ein?

    hmm ein vernünftiges Tabellendesign?

    Denn deine Abfrage sieht mehr als merkwürdig aus

    Ansonsten kann ich dir diese Seite im MySQL Manual empfehlen:
    http://dev.mysql.com/doc/refman/4.1/en/rewriting-subqueries.html

    Wie dir hoffentlich bekannt ist, ist <> ALL das gleiche wie NOT IN.

    Und:
    SELECT * FROM t1 WHERE id NOT IN (SELECT id FROM t2);

    Kann geschrieben werden als:
    SELECT table1.* FROM table1
    LEFT JOIN table2 ON table1.id=table2.id
    WHERE table2.id IS NULL;

    Ansonsten:
    Mach zwei Abfragen davon.

    Grüße
    Klaus