[SQL] Maar één rij uit tabel 1 weergeven per rij in tabel 2

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb problem met een query.

-----------------
-- TABLE1--
-----------------
id field
-1- value a
-2- value b
-3- value c
-4- value d
------------------
-- TABLE2 --
------------------
t1_id t3_id
- 1 - 1
- 1 - 2
- 1 - 3
- 3 - 1
- 3 - 3
-----------------
-- TABLE3--
-----------------
id field
-1- name a
-2- name b
-3- name c

Query
SELECT * FROM table1 a, table2 b where a.id = b.t1_id and (b.t3_id = 1 or b.t3_id = 2);

Als ik nu een loop uitvoer, krijg ik 'value a' 2x terug omdat 'value a' zowel gelinked is aan t3_id 1 en 2. Ik wil gewoon 1x 'value a' terug krijgen. Ik heb al verschillende queries geprobeerd, met DISTINCT en UNION, maar kom er niet uit.

Is dit uberhaupt mogelijk met 1 query?

Verwijderd

GROUP BY :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Belangrijke vraag daarbij: welke rij wil je terugkrijgen?
Zie ook Programming FAQ - SQL: Hoe werkt dat GROUP BY nu eigenlijk?

Verder: "[SQL] Query vraag" is nou niet echt een bijster handige titel. 99% van de vragen met [SQL] als tag bevatten een query vraag en het omschrijft je probleem niet echt. Een topictitel is het visitekaartje van je topic en een goeie titel zorgt ervoor dat je topic vaker bekeken wordt. ;) Ik zal er even iets aan doen, probeer er de volgende keer zelf aan te denken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Zo simpel! :)

met Group By kun je alleen 1 column selecteren toch? in mijn geval is dat de ID.

ik voor nu een andere query uit binnen de loop om de extra columnen op te vragen.

Is dat dan de juiste manier om dit te doen?

edit, bedankt voor het aanpassen van de titel. zal er om denken de volgende keer ;)

[ Voor 15% gewijzigd door Verwijderd op 24-09-2009 11:48 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Wat wil je eigenlijk terug krijgen? De reden dat value_a meerdere keren terug komt is om dat het een keer met name_a en een keer met name_b terug komt. Als je alleen value_a nodig hebt, dan moet je alleen value_a in je gevraagde kolommen opnemen. In dat geval werkt distinct precies zoals je zou willen.


Tot slot. ik denk voor 99.9% zeker te weten dat je op dit moment GROUP BY volkomen verkeerd gebruikt en dat het ook niet de juiste manier is om dit probleem aan te pakken. Group by heeft geen maximum voor 1 veld, in group by moeten juist alle velden opgenomen worden die niet geaggregeerd worden. Aggregeren houd in dat verschillende elementen samengenomen worden naar 1 element. Voorbeelden zijn MIN, MAX en AVG.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Ik denk dat je gelijk hebt.

Ik heb nu de volgende query:

code:
1
sSQL = "SELECT a.sit_id FROM situations a, cob_situation b where a.sit_id = b.sit_id GROUP BY a.sit_id;"


achtergrond info: een Situation (tabel a) kan gelinked worden aan meerdere CoBs (tabel b). Ik heb een interface gebouwd waar je kan filteren op CoB (er is nog een 3rd tabel met de namen van de CoBs). Stel dat een Situation gelinked is aan 5 CoBs, als ik nu filter op CoB 1, CoB 2 en CoB 3 krijg ik dus 3 maal hetzelfde Situation record terug.

Als ik de bovenstaande query gebruik krijg ik idd het unieke record terug (sit_id), in mijn do while loop lees ik vervolgens de id in om meer informatie uit te lezen. In de Situation tabel zit namelijk meer columnen/info die ik nodig heb.

Hoop dat het wat duidelijker word?

Dennis

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Als je alleen maar gegevens uit de tabel situation nodig hebt dan kun je die in dit geval zonder problemen toevoegen aan de gevraagde kolommen. Je krijgt pas 'problemen' wanneer je ook nog kolommen uit cobs of cobs_situation nodig hebt. Pas in dat geval zul je namelijk meerdere combinaties terug gaan krijgen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1