[MySQL 4.1] Outer Join liefert falsches Ergebnis

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.1] Outer Join liefert falsches Ergebnis

    Hallo

    Ich hab folgenden Query von dem ich dachte, daß er richtig sei:

    "SELECT A.* FROM category AS A LEFT OUTER JOIN (SELECT DISTINCT category_operations.cat_id FROM category_operations WHERE category_operations.op_id = ".$_POST['select_operation'].") AS B ON A.cat_id = B.cat_id"


    Bei "SELECT * FROM category" erhalte ich folgende Werte für cat_id:
    1
    2
    3
    4
    5
    6
    7
    8
    10

    Bei SELECT DISTINCT category_operations.cat_id FROM category_operations WHERE category_operations.op_id = ".$_POST['select_operation']." als einzelne Query erhalte ich folgende Werte für cat_id:
    2
    3
    4
    5
    6
    7
    8

    Wie muß mein Query von oben richtig heißen, damit ich als Ergebnis die ID 1 und 10 herausbekomme?

  • #2
    SELECT A.* FROM category AS A LEFT JOIN category_operations AS B USING cat_id WHERE category_operations.op_id != ".$_POST['select_operation']."

    Ist so auf jeden Fall einen Versuch wert.

    Ron

    Kommentar


    • #3
      Original geschrieben von ronweber
      SELECT A.* FROM category AS A LEFT JOIN category_operations AS B USING cat_id WHERE category_operations.op_id != ".$_POST['select_operation']."

      Ist so auf jeden Fall einen Versuch wert.

      Ron
      leider nicht :/

      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cat_id WHERE category_operations.op_id != 18'

      Kommentar


      • #4
        SELECT A.cad_id FROM category AS A LEFT JOIN category_operations AS B ON A.cat_id = B.cad_id WHERE B.op_id != ".$_POST['select_operation']."

        Also so würde ich schon erwarten, dass es funktioniert.

        Kommentar


        • #5
          Leider nicht :/

          Nachdem ich die Rechtschreibfehler (cat_id ) beseitigt hab, hat er zwar eine Ausgabe gemacht, aber nicht die, die er sollte. Ich glaub das Problem liegt darin, daß cat_id in category_operations mit verschiedenen op_id vorkommen kann und sobald eine op_id mit der POST[op_id] übereinstimmt soll die zugehörige Kategorie ignoriert werden.

          Hab mal einen abgespeckten SQL-Dump erstellt:

          --
          -- Tabellenstruktur für Tabelle `category`
          --

          CREATE TABLE `category` (
          `cat_id` smallint(4) unsigned NOT NULL auto_increment,
          PRIMARY KEY (`cat_id`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

          --
          -- Daten für Tabelle `category`
          --

          INSERT INTO `category` VALUES (1);
          INSERT INTO `category` VALUES (2);
          INSERT INTO `category` VALUES (3);
          INSERT INTO `category` VALUES (4);
          INSERT INTO `category` VALUES (5);
          INSERT INTO `category` VALUES (6);
          INSERT INTO `category` VALUES (7);
          INSERT INTO `category` VALUES (8);
          INSERT INTO `category` VALUES (10);

          --
          -- Tabellenstruktur für Tabelle `category_operations`
          --

          CREATE TABLE `category_operations` (
          `cat_id` smallint(4) unsigned NOT NULL default '0',
          `op_id` smallint(4) unsigned NOT NULL default '0',
          PRIMARY KEY (`cat_id`,`op_id`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

          --
          -- Daten für Tabelle `category_operations`
          --

          INSERT INTO `category_operations` VALUES (1, 14);
          INSERT INTO `category_operations` VALUES (1, 13);
          INSERT INTO `category_operations` VALUES (2, 1);
          INSERT INTO `category_operations` VALUES (2, 2);
          INSERT INTO `category_operations` VALUES (2, 3);
          INSERT INTO `category_operations` VALUES (2, 4);
          INSERT INTO `category_operations` VALUES (2, 5);
          INSERT INTO `category_operations` VALUES (3, 1);
          INSERT INTO `category_operations` VALUES (3, 2);
          INSERT INTO `category_operations` VALUES (3, 3);
          INSERT INTO `category_operations` VALUES (3, 4);
          INSERT INTO `category_operations` VALUES (3, 5);
          INSERT INTO `category_operations` VALUES (4, 1);
          INSERT INTO `category_operations` VALUES (4, 2);
          INSERT INTO `category_operations` VALUES (5, 1);
          INSERT INTO `category_operations` VALUES (5, 2);
          INSERT INTO `category_operations` VALUES (5, 3);
          INSERT INTO `category_operations` VALUES (5, 4);
          INSERT INTO `category_operations` VALUES (6, 1);
          INSERT INTO `category_operations` VALUES (6, 2);
          INSERT INTO `category_operations` VALUES (7, 1);
          INSERT INTO `category_operations` VALUES (7, 2);
          INSERT INTO `category_operations` VALUES (8, 1);
          INSERT INTO `category_operations` VALUES (8, 2);
          INSERT INTO `category_operations` VALUES (2, 6);
          INSERT INTO `category_operations` VALUES (2, 7);
          INSERT INTO `category_operations` VALUES (3, 6);
          INSERT INTO `category_operations` VALUES (3, 7);
          INSERT INTO `category_operations` VALUES (4, 6);
          INSERT INTO `category_operations` VALUES (4, 7);
          INSERT INTO `category_operations` VALUES (5, 6);
          INSERT INTO `category_operations` VALUES (5, 7);
          INSERT INTO `category_operations` VALUES (1, 8);
          INSERT INTO `category_operations` VALUES (1, 9);
          INSERT INTO `category_operations` VALUES (1, 10);
          INSERT INTO `category_operations` VALUES (1, 11);
          INSERT INTO `category_operations` VALUES (2, 12);
          INSERT INTO `category_operations` VALUES (3, 12);
          INSERT INTO `category_operations` VALUES (4, 18);
          INSERT INTO `category_operations` VALUES (1, 19);

          Bsp.:
          Wenn ich als op_id die 1 übergebe, dann soll mir als cat_id nur die 1 und die 10 ausgegeben werden.

          Wenn ich die 19 übergebe, dann alles außer die 1

          Kommentar

          Lädt...
          X