Fichtl: + SQL - SELECT was nicht dazugehört

Hallo liebe SQL-Gurus,
ich hab da ein kleines Problem und zwar habe ich folgende Tabellen:

ItemTab
  1  Item1
  2  Item2
  3  Item3

KatTab
  1  Kategorie1
  2  Kategorie2

JoinTabelle
KatTabId  ItemTabId
  1         1
  2         2

So, ich möchte jetzt ein SELECT machen wo herauskommt welche
Items NICHT der Kategorie2 zugeordnet sind. Also Item1 weil gehört
zu Kategorie1 und Item3 weil gehört nirgends dazu.

Ich schaffe das irgendwie nicht in ein SELECT zu packen. Hat da
jemand eine Ahnung, danke schonmal im voraus.

Schöne Grüße
Fichtl

  1. Hi,

    ad 1) SQL-spezifische Fragen, in denen nicht das verwendete DBMS genannt wird, sind so nützlich wie "suche Dolmetscher", ohne die gewünschten Sprachkenntnisse zu erwähnen. Darum besteht meine Antwort auch nur aus einem Wort:

    So, ich möchte jetzt ein SELECT machen wo herauskommt welche
    Items NICHT der Kategorie2 zugeordnet sind.

    MINUS

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Ja, Ja, Bla, Bla, Hallo Cheatah,

      bin schon etwas leicht gereizt und deswegen nicht
      mehr ganz bei der Sache. MySQL 4

      Außerdem wärs mir eh egal in welchem SQL wenn ich
      seh wie's ungefähr geht kann ich's mir eh umbasteln.

      Gleich Nochmal, mal sehen ob du in SQL auch so
      fit bist wie im blöd daherreden.

      Danke Fichtl!

      ps.: nicht alles ernst nehmen bitte, bin nur
      wirklich mieß gelaunt aber für jede Hilfe dankbar.

      1. Hallo Fichtl,

        wenn Du so auf Hinweise, welcher Art auch immer, reagierst,
        geht die Hilfsbereitschaft gegen Null.

        Gruss

        Bernd

        Ja, Ja, Bla, Bla, Hallo Cheatah,

        bin schon etwas leicht gereizt und deswegen nicht
        mehr ganz bei der Sache. MySQL 4

        Außerdem wärs mir eh egal in welchem SQL wenn ich
        seh wie's ungefähr geht kann ich's mir eh umbasteln.

        Gleich Nochmal, mal sehen ob du in SQL auch so
        fit bist wie im blöd daherreden.

        Danke Fichtl!

        ps.: nicht alles ernst nehmen bitte, bin nur
        wirklich mieß gelaunt aber für jede Hilfe dankbar.

        1. wenn Du so auf Hinweise, welcher Art auch immer, reagierst,
          geht die Hilfsbereitschaft gegen Null.

          hab mich doch sofort wieder entschuldigt, und außerdem
          hab ich dieses Wort in der Schule schon gehaßt. Er
          hat also so zu sagen ein Kindheitstrauma wieder in
          Erinnerung gerufen. ;-)

          ps.: nicht alles ernst nehmen bitte, bin nur
          wirklich mieß gelaunt aber für jede Hilfe dankbar.

          Ich will aber jetzt auf keinen Fall eine "Wie muß ich mich
          benehmen" Diskussion. Auf das kann ich heute wirklich verzichten.

          Einen schönen Tag noch und viele Grüße
          Fichtl

      2. Hi

        Ja, Ja, Bla, Bla, Hallo Cheatah,

        Ohh, da muss ich Cheatah aber in Schutz nehmen.

        Außerdem wärs mir eh egal in welchem SQL wenn ich
        seh wie's ungefähr geht kann ich's mir eh umbasteln.

        Ok, dass geht bei mir (Access) ungefähr so:

        SELECT ITEM.NAME FROM ITEM
         WHERE ITEM.ID NOT IN (
          SELECT JOINTAB.ITEMID FROM JOINTAB
            WHERE JOINTAB=2);

        Probier dass nun mal in MySQL. Funktionierts? Dachte ich mir doch. ;-)

        MfG

        Tom2

        PS: Den Würgaraound in MySQL weiss ich jetzt nicht einfach so ;-)

        --
        SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
        ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
      3. Hi,

        Ja, Ja, Bla, Bla, Hallo Cheatah,

        siehe bisherige Antworten.

        bin schon etwas leicht gereizt und deswegen nicht
        mehr ganz bei der Sache.

        _Vor_ dem Verfassen eines Postings tief durchatmen.

        MySQL 4

        MINUS

        Außerdem wärs mir eh egal in welchem SQL wenn ich
        seh wie's ungefähr geht kann ich's mir eh umbasteln.

        Nein, kannst Du nicht.

        Gleich Nochmal, mal sehen ob du in SQL auch so
        fit bist wie im blöd daherreden.

        Bin ich. MINUS ist die Antwort. Der Rest steht in der Doku Deines DBMS. Vielen Dank auch für Deine Komplimente. Tief durchatmen.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. tief durchatmen

          hallo,

          MySQL 4

          MINUS

          erklären bitte, ich will ja nicht dumm bleiben.

          Nein, kannst Du nicht.

          SELECT id AS item\_id FROM tb\_items
          LEFT OUTER JOIN tb\_node\_items
          ON tb\_node\_items.item\_id=tb\_items.id
          WHERE node\_id<>'{$node_id}' OR ISNULL(node\_id)
          LIMIT {$start_item}, {$page_size}";

          Bin ich. MINUS ist die Antwort. Der Rest steht in der Doku Deines DBMS. Vielen Dank auch für Deine Komplimente. Tief durchatmen.

          auf eine Doku zu verweisen die den Umfang von lächerlichen zB
          650 Seiten hat, ist nicht zielführend.

          Doku Beispiel:
          http://www.amazon.de/exec/obidos/ASIN/3827317622/qid=1053511610/sr=2-1/ref=sr_aps_prod_1_1/028-4599528-5067723

          bis dann,
          Fichtl

  2. Hi,

    ItemTab
      1  Item1
      2  Item2
      3  Item3

    KatTab
      1  Kategorie1
      2  Kategorie2

    JoinTabelle
    KatTabId  ItemTabId
      1         1
      2         2

    nebenbei, warum hat die erste Tabelle keine 3. Spalte kategorie, da man die letzte Tabelle dann nicht braucht?

    So, ich möchte jetzt ein SELECT machen wo herauskommt welche
    Items NICHT der Kategorie2 zugeordnet sind. Also Item1 weil gehört
    zu Kategorie1 und Item3 weil gehört nirgends dazu.

    Du sagst es doch schon: nicht
    sieh nach wie das nicht-zeichen deines Datenbanksystems lautet und schreibe where kategorie_id nicht 2

    meistens kannman sowas schreiben:
    select blabla from blabla where kategorie_id != 2

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. Hallo ROMY,

      jetzt verteil ich aber mal ein MINUS, ;-)

      nebenbei, warum hat die erste Tabelle keine 3. Spalte kategorie, da man die letzte Tabelle dann nicht braucht?

      wein ein item zu mehreren Kategorien gehören kann, deswegen
      dritte Tabelle.

      meistens kannman sowas schreiben:
      select blabla from blabla where kategorie_id != 2

      ungleich in SQL = "<>" zumindest bei MySQL, dann bekomme ich
      aber leider nur die, die eine andere Kategorie als "1" haben
      ich möchte allerdings auch die die garnicht in der dritten Tabelle
      vorkommen...

      Danke auf jeden Fall
      und schöne Grüße

      Fichtl

      1. Hi,

        wein ein item zu mehreren Kategorien gehören kann, deswegen
        dritte Tabelle.

        hab ich nicht rausgelesen. Aber so gesehen, hast Du schon Recht

        ungleich in SQL = "<>" zumindest bei MySQL, dann bekomme ich
        aber leider nur die, die eine andere Kategorie als "1" haben
        ich möchte allerdings auch die die garnicht in der dritten Tabelle
        vorkommen...

        dann solltest DU eine Verknüpfung anstreben, nämlich das selektieren aller datensätze mit kategorie ungleich 2 und dann selektieren aller datensätze, die nicht vorkommen in der Tabelle 3 ... (ich weiss nicht, ob es in mySQL so etwas wie "not exists" gibt?

        es könnte grob so aussehen.
        select bal from tabelle3 where kat=2 [union] select bla from tabelle1 where [not exists] select bla from tabelle 3

        ciao
        romy

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
        Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
        Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
  3. Hallo Fichtl!

    Am einfachsten, du suchst alle Items, die der Kategorie 2 zugewiesen sind und danach einfach alle, die nicht diesen Datensätzen entsprechen:

    select * from ItemTab where ItemId not in (select distinct ItemTabId from jointabelle where KatTabId = 2);

    mfg

    norbert =:-)