Komplexe SELECT Abfrage

jMaxM

Neuer Benutzer
Beiträge
1
Hallo Zusammen,

ich habe ziemlich triviale DB Schema, aber trotzdem kann keine richtige SELECT - Abfrage konstruieren...

Das Problem ist folgende:

ich habe vier Tabellen: USER, USERSKILL, SKILL und CATEGORY (habe Script zum Erzeugen hinzugefügt)

Tabelle USER:
create table user (
userId int not null primary key auto_increment,
userName varchar(100),
userFullName varchar(100),
userEmail varchar(100)
);
Tabelle SKILL:
create table skill (
skillId int not null auto_increment primary key,
skillTitle varchar(100),
skillDescription varchar(100),
categoryId int,
foreign key (categoryId) references category(categoryId) on delete cascade
);
Tabelle USERSKILL:
create table userskill (
userSkillId int primary key auto_increment not null,
userId int,
skillId int,
selfAssessment varchar(5),
foreign key (userId) references user(userId) on delete cascade,
foreign key (skillId) references skill(skillId) on delete cascade
);
verknüpft USER und SKILL und lässt USERs sich einschätzen wie gut die bestimmte SKILLS drauf haben (USERSKILL.selfAssessment)!

Problem: ich suche nach Benutzer (USER) die z. B. Java SE 6 mit der Note (USERSKILL.selfAssessment) <= 2 haben UND auch Spring mit der Note <= 2 können.

Mein SELECT:

select uSk.* from userskill uSk WHERE (uSk.skillId = 3 and uSk.selfAssessment <= 2) OR ((uSk.skillId = 1 and uSk.selfAssessment <= 2))

aber "ER" liefert mir auch Daten von USER die nur EINE der SKILLs drauf haben! Aber ich brauche NUR die Datensätze von Benutzer die BEIDE SKILLs draufhaben!!! Also wenn ich anstatt OR, AND schreibe liefert "ER" mir nichts, ist klar, "ER" betrachtet ein Datensatz pro einmal und der Datensatz kann nicht gleichzeitig uSk.skillId 3 und 1 haben...

Leider bin ich auf meine "Grenzen" gestoßen und kann leider eine solche Abfrage nicht konstruieren...

Für die Hinweise oder Ratschläge bin ich sehr dankbar!!!
 

Anhänge

  • emptytables.txt
    787 Bytes · Aufrufe: 3
  • insert_data.txt
    3,9 KB · Aufrufe: 1
Werbung:

Ich hoffe, ich hab Dich richtig verstanden.

Aber zuerst einmal ein 'Anschiss': user ist ein reservierter Name, den sollte man nicht für eigene Tabellen nehmen. Außerdem verwendest Du Zeichenketten im vergleich mit Integer.
Falls Du nun noch MyISAM nutzen solltest, dann sind Deine Constraints übrigens wertlos.

So: Du suchst User aus der Schnittmenge zweier Bedingungen... Schnittmenge ... intersect!

Code:
test=*# select userid from userskill uSk WHERE uSk.skillId = 1 and (uSk.selfAssessment)::int <= 2 intersect select userid from userskill uSk WHERE uSk.skillId = 3 and (uSk.selfAssessment)::int <= 2;
 userid
--------
      2
      3
(2 rows)

Das kannst Du nun in Deine Abfrage als WHERE einbauen. Wo ich mir nicht sicher bin: unterstützt MySQL mein 'intersect'?


Andreas
 
Hy,

glaub nicht das MaySql intersect kann.... Kann doch erst ab Version 5 Views.... ;-)

Code:
select uSk.*
from userskill uSk
WHERE uSk.skillId IN ( 1 , 3 )
AND uSk.selfAssessment <= 2

Lg
 
Werbung:
Zurück
Oben