Archief - MySQL: distinct select van twee onafhankelijke tabellen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Cyberkef

Legacy Member
Hallo,

Ik heb hier twee tabellen:

member_stats (many-to-many relatietabel waarin één user_id meerdere keren kan voorkomen), atm selecteer ik die met "SELECT distinct(user_id) FROM member_stats" om de user_id's uniek te verkrijgen :)

Nu heb ik een nieuwe tabel member_comprofiles waarin er ook meerdere keren hetzelfde user_id kan voorkomen. Hierin zou ik dus ook die distinct select kunnen gebruiken.

Een user_id die in de ene tabel zit, hoeft niet noodzakelijk in de andere tabel te zitten.

Maar nu wil ik die twee select's in één mysql-opdracht krijgen, waarin je dus de resultaten van de twee select's in één kiepert en daar ook een distinct select van die user_id's doet. Ik ben nu al een uur aan het proberen en ik geraak er maar niet uit :oink:

En twee verschillende array's vullen, bij elkaar steken en dat outputten wil ik slechts gebruiken als het echt niet anders kan ;)

:help:

Lashknife

Legacy Member
euh, andere aanpak mss maar
select id1 from table1 where id1 not in (select id2 from table2)
join
select id2 from table2 where id2 not in (select id1 from table1)
join
select id1 from table1, table2 where id1 == id2 -> alle gelijke 1x

kan zijn da ik er glad naast zit (prolly :D sql queries zitten heeeel ver bij mij), maar eerst a not b, b not a en dan a doorsnede b voor geheel a unie b te krijgen maar zonder duplicates?

orez

Legacy Member
what about gewoon een select distinct op een outer join?

Ik neem aan dat er ook user id's inzitten die niet in beide tabellen voorkomen?
Dan als ge ne FULL OUTER JOIN doet op user_id, hebde alle user_id's mee, en dan op user_id
Code:
SELECT DISTINCT user_id FROM member_stats FULL OUTER JOIN member_comprofiles ON member_stats.user_id = member_comprofiles.user_id

lukt da nie?

Cyberkef

Legacy Member
ru`orez zei:
what about gewoon een select distinct op een outer join?

Ik neem aan dat er ook user id's inzitten die niet in beide tabellen voorkomen?
Dan als ge ne FULL OUTER JOIN doet op user_id, hebde alle user_id's mee, en dan op user_id
Code:
SELECT DISTINCT user_id FROM member_stats FULL OUTER JOIN member_comprofiles ON member_stats.user_id = member_comprofiles.user_id

lukt da nie?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER JOIN member_comprofiles ON member_stats.user_id = member_comprofiles.user_' at line 1

(idem met die full weg)
((MySQL 4.1.15-nt))

Lashknife zei:
select user_id from member_stats where user_id not in (select user_id from member_comprofiles)
join
select user_id from member_comprofiles where user_id not in (select user_id from member_stats)
join
select ms.user_id from member_stats ms, member_comprofiles mc where ms.user_id == mc.user_id
Geeft ook een error :) Lijntje per lijntje lukt het wel, maar het samenvoegen met die joins doet em raar over ;)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'join select user_id from member_comprofiles where user_id not in (select use' at line 2

UNION is used to combine the result from a number of SELECT statements into one result set.
Dat es proberen...

Code:
(SELECT user_id FROM member_stats)
UNION
(SELECT user_id FROM member_comprofiles)

User_id 2 komt in elke tabel voor, en wordt maar één keer geselecteerd... Distinct zit er zelfs automatisch in. Werkt dus perfect ^^

Case: closed :music:

dJeez

Legacy Member
ru`orez zei:
Dan als ge ne FULL OUTER JOIN doet op user_id, hebde alle user_id's mee, en dan op user_id
MySQL kent geen full outer joins, het enige wat je kan doen is idd de twee "helften" van de outer join apart ophalen en er een union tussen leggen.

Ik zou trouwens niet met een subselect werken, tenzij effectief nodig. Je kan in principe ook 2x een left join toepassen (of een left & right join), gevolgd door de union om tenslotte de full outer join te bekomen.

En bij een union worden duplicaten idd weggegooid, tenzij je UNION ALL zou gebruiken :p.

orez

Legacy Member
ah, tnx for the tip, kwist ni eens da MySQL da ni ondersteunde, nog geen enkele MySQL toepassing geschreven waar ik da nodig had ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan