Match ongerelateerde tabellen (MySQL)
Naar navigatie springen
Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Het klinkt als een oxymoron, maar soms wil ik records in ongerelateerde tabellen 1-op-1 matchen.
Voorbeeld: EAN-codes toekennen aan producten
- Tabel tmp1 met 100 nieuwe producten
- Tabel tmp2 met 100 beschikbare EAN-nummers
- Ik wil deze tabellen 1-op-1 matchen, zodat elk product een EAN-number krijgt
Join zonder conditie?
Leuk bedacht, maar een join zonder conditie, is niet de oplossing:
select * from tmp1 join tmp2
Dit genereert het Cartesiaanse product van de twee tabellen met 10.000 rijen in totaal.
Join zonder join?
Nog leuker bedacht, maar ook dit geeft een Cartesiaans product:
select * from tmp1, tmp2
En dit vaart al niet beter:
select distinct * from tmp1, tmp2 group by tmp1.sku_b3, tmp2.ean;
Cross join?
Ook niet (al of niet met distinct
of group by
:
select * from tmp1 cross join tmp2
Volgnummer invoegen
Deze oplossing heb ik sinds 2016 regelmatig gebruikt. Ik vind 'm nog steeds wat omslachting, maar het werkt wel:
- Maak van beide tabellen een tijdelijk kopie, waarvan je de records wil matchen (dus alle rijen van producten waar een EAN-nummer aan moet worden toegevoegd, en evenveel rijen uit de EAN-tabel met beschikbare EAN-nummers)
- Voeg aan beide tabellen een pk-kolom toe die zichzelf nummert vanaf 1
- Match de tabellen op pk-nummer & wissel data uit
- Gebruik deze twee tijdelijke tabellen om de achterliggende brontabellen bij te werken.
Zie ook
Bronnen
- https://stackoverflow.com/questions/17630227/how-to-combine-two-unrelated-tables-in-mysql - Cartesiaans product
- https://stackoverflow.com/questions/31634144/how-can-i-fetch-data-from-two-unrelated-tables-in-one-query-in-one-row - Lijkt niet te werken
- https://stackoverflow.com/questions/29278051/select-from-2-unrelated-tables-and-merge-unique-id-columns - Emulate FULL JOIN