Toon posts:

[SQL] vraagje, join probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een programmaatje om Character Sheets te maken voor Startrek RPG.
En nu zit ik vast met het geven van een overzicht van Skills en specializations

Ik heb de volgende tabbelen:
Sheet
Dit is de tabel waar het gros van de gegevns in komen te staan (naam, rang, etc).

Skill
Dit is een lijst met skills. Bij een skill kunnen 0,* [spec] horen

Spec
Dit is een lijst met Specializations

Koppel1
Dit is de tabel die sheet, skill en Spec koppelt


De velden die in deze tabellen van belang zijn:
Sheet
Sheet_ID

Skill
Skill_ID
naam

Spec
Spec_ID
Skill_ID
naam

Koppel1
Koppel_ID
Sheet_ID
Skill_ID
Spec_ID
skill_score
spec_score


Ik moet dus uit de bovenstaande tabellen een overzicht hebben waar uit ik het volgende kan halen.
code:
1
2
3
4
5
    naam      score
Skill1          1 
Skill2 (Spec1)    2 (3)
Skill3 (Spec2)    1 (4)
Skill4          3

Het probleem is dus dat er bij een en dezelfde skill soms een specialization hoort en soms niet.

edit:typo

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:00
Uw probleem is dus dat je bepaalde gegevens niet krijgt omdat er geen specialization aangekoppeld is? In dat geval kan je het oplossen mbhv een OUTER join.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dit is wat ik tot dusver heb kunnen verzinnen, maar volgens mij moet het toch makkelijker kunnen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT DISTINCT *
FROM koppel1
WHERE Koppel_ID IN
(
SELECT Koppel1.Koppel_ID 
FROM Skill, sheet, Koppel1
WHERE 2=Koppel1.sheet_ID
AND Koppel1.Skill_ID=Skill.Skill_ID
AND Koppel1.Spec_ID=9999999999
)
OR Koppel_ID IN
(
SELECT Koppel1.koppel_ID
FROM Spec, Skill, sheet, Koppel1
WHERE 2=Koppel1.sheet_ID
AND Koppel1.Skill_ID=Skill.Skill_ID
AND Spec.Spec_ID=Koppel1.Spec_ID
)

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:00
Op zaterdag 17 november 2001 11:40 schreef Quintony het volgende:
Dit is wat ik tot dusver heb kunnen verzinnen, maar volgens mij moet het toch makkelijker kunnen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT DISTINCT *
FROM koppel1
WHERE Koppel_ID IN
(
SELECT Koppel1.Koppel_ID 
FROM Skill, sheet, Koppel1
WHERE 2=Koppel1.sheet_ID
AND Koppel1.Skill_ID=Skill.Skill_ID
AND Koppel1.Spec_ID=9999999999
)
OR Koppel_ID IN
(
SELECT Koppel1.koppel_ID
FROM Spec, Skill, sheet, Koppel1
WHERE 2=Koppel1.sheet_ID
AND Koppel1.Skill_ID=Skill.Skill_ID
AND Spec.Spec_ID=Koppel1.Spec_ID
)
Welk DBMS gebruik je? En kijk eens in de help van dat DBMS naar OUTER joins, hoe je die in uw query moet schrijven.
Dan bekom je zoiets.
code:
1
2
3
4
SELECT koppel1.* FROM koppel1, Skill, Spec
 WHERE koppel1.Skill_id (+) = Skill.Skill_id
   AND koppel1.Spec_id  = Spec.Spec_id
   AND koppel1.Spec_id  = 9999999

https://fgheysels.github.io/


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 17 november 2001 13:22 schreef whoami het volgende:
Welk DBMS gebruik je? En kijk eens in de help van dat DBMS naar OUTER joins, hoe je die in uw query moet schrijven.
Dan bekom je zoiets.
code:
1
2
3
4
SELECT koppel1.* FROM koppel1, Skill, Spec
 WHERE koppel1.Skill_id (+) = Skill.Skill_id
   AND koppel1.Spec_id  = Spec.Spec_id
   AND koppel1.Spec_id  = 9999999
Das echter wel oracle specifiek dacht ik zo.
En het kan zijn dat je dan nog een stel extra "(+)"'jes moet plaatsen (bij elke and-regel achter een koppel1-veld)

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:00
Op zaterdag 17 november 2001 13:27 schreef ACM het volgende:

[..]

Das echter wel oracle specifiek dacht ik zo.
En het kan zijn dat je dan nog een stel extra "(+)"'jes moet plaatsen (bij elke and-regel achter een koppel1-veld)
Idd, daarom vroeg ik ook welk DBMS hij gebruikt en om eens in zijn docu te lezen hoe het daar specifiek gebeurt.

https://fgheysels.github.io/

Pagina: 1