Union Queries (MySQL)
Versie door Jeroen Strompf (overleg | bijdragen) op 17 mrt 2018 om 12:23 (→Je mag het niet met jezelf doen)
Wat ik in juli 2017 zocht:
(select sku from root_discontinued where cat like "Discontinued summer 2017") union (select sku from root_child_discontinued where cat like "Discontinued summer 2017") order by sku;
Voorbeelden
Het is Union select
Let op: union select
ipv. alleen union
select 'TemplateType=HomeImprovement','Version=2014.1223' union select 'item_sku', 'external_product_id'
Meer union select's achter elkaar is geen probleem
select 'TemplateType=HomeImprovement','Version=2014.1223' union select 'Lagerhaltungsnummer', 'Hersteller-Barcode' union select 'item_sku', 'external_product_id'
Aantal kolommen moet overeen komen
Oftwel: Dat de laatste kolommen leeg worden gelaten, is helaas geen optie. Dit werkt dus niet:
select 'TemplateType=HomeImprovement','Version=2014.1223' -- 2 Items union select 'Lagerhaltungsnummer', 'Hersteller-Barcode', 'Barcode-Typ' -- 3 items union select 'item_sku', 'external_product_id','external_product_id_type' -- 3 items
Aantal kolommen aanvullen met null
Eén manier om het aantal kolommen gelijk te krijgen, is met het keyword null
:
select 'TemplateType=HomeImprovement','Version=2014.1223', null union select 'Lagerhaltungsnummer', 'Hersteller-Barcode', 'Barcode-Typ' union select 'item_sku', 'external_product_id','external_product_id_type'
Je mag het soms met jezelf doen
Twee keer dezelfde dataset invoegen, lijkt niet te werken, ook al geeft het geen foutmelding:
drop table if exists tmp; create table tmp (sku tinytext, applications text); insert into tmp values ("001","hond,kat,herder,siamees,bruine herder,zwarte herder,rui,herder teef"); insert into tmp values ("002","hond,cavia,hazewind,rui,teef,mannetje,vrouwtje"); insert into tmp values ("002","marmotje"); insert into tmp values ("003","hamster"); # select * from tmp; drop table if exists tmp1; create table tmp1 (select * from tmp where applications not like "%,%") union (select * from tmp where applications not like "%,%"); select * from tmp1;
Maar dit werkt wel:
drop table if exists tmp1; create table tmp1 (select * from tmp where applications not like "%,%") union (select * from tmp where applications like "%,%"); select * from tmp1;
Bronnen
- https://dev.mysql.com/doc/refman/5.0/en/union.html - Compleet!
- http://stackoverflow.com/questions/7407864/mysql-select-union-for-different-columns - Gebruik null
- http://stackoverflow.com/questions/2201170/how-to-select-multiple-rows-filled-with-constants - UNION is de manier om meerdere rijden in een query te specificeren
- http://stackoverflow.com/questions/2886449/is-it-possible-to-have-a-tableless-select-with-multiple-rows - Opnieuw: UNION nodig om meerdere rijen aan te maken