Union Queries (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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