+ SQL - SELECT was nicht dazugehört
Fichtl
- programmiertechnik
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
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
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.
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 4Auß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.
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
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 ;-)
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
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
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
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
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
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 =:-)