schildi: self join, alles vergleichen ausser gleiche werte

hallo!

ich möchte folgende abfrage über eine tabelle gestalten:

jeder datensatz soll mit jedem verglichen werden, außer mit demselben.
komme hier auf keine brauchbare lösung..

*tabelle test*
-----------
wert
-----------
 A
 B
 C

verglichen werden sollte hier also:

A mit B, A mit C
B mit A, B mit C
C mit A, C mit B

meine lösung war folgende:

SELECT a.*
FROM test a CROSS JOIN test b
WHERE a.wert <> b.wert

leider ist das für die mysql 5 datenbank schon zuviel des guten.
bei ca 700 datensätzen rödelt die datenbank schon ewig.
gibt es einen anderen weg?..

gruß lars

  1. yo,

    mach doch mal eine einen einfachen join draus, anstelle einen ceross join zu verwenden:

    SELECT a.*
    FROM test a
    INNER JOIN test b ON a.wert <> b.wert
    ;

    denke daran, dass dabei viele datensätze rauskommen können.

    Ilja

    1. yo,

      mach doch mal eine einen einfachen join draus, anstelle einen ceross join zu verwenden:

      SELECT a.*
      FROM test a
      INNER JOIN test b ON a.wert <> b.wert
      ;

      INNER JOIN ist lediglich ein Alias zu CROSS JOIN ...

      http://dev.mysql.com/doc/refman/4.1/en/join.html

      1. yo,

        INNER JOIN ist lediglich ein Alias zu CROSS JOIN ...

        sicherlich, aber ich benutze immer einen INNER JOIN, wenn ich eine Join bedingung habe und du hast eine. ist letztlich eine "geschmackssache". wie auch immer, bei mysql 5 und 700 datensätze liegt es nicht an dem dbms, sondern eventuell ist es ein darstellungsproblem oder aber die hardware ist sehr alt.

        Ilja

        1. ok. deine schreibweise ist zumindest mal schneller..