Por que preciso fazer outra seleção quando estou tentando inserir valores distintos em uma tabela? Além disso: existe uma maneira melhor de fazer isso?
FUNCIONA:
INSERT INTO phppos_categories (name)
SELECT category FROM
(SELECT DISTINCT category FROM phppos_items as items
UNION
SELECT DISTINCT category FROM phppos_item_kits as item_kits)
as category_result;
NÃO FUNCIONA:
INSERT INTO phppos_categories (name)
(SELECT DISTINCT category FROM phppos_items as items
UNION
SELECT DISTINCT category FROM phppos_item_kits as item_kits)
Tente isso vai funcionar
Não funciona porque a sintaxe é definida como , por exemplo
INSERT .. SELECT
, deve haver um válidoSELECT
na instrução geral. Para o seu exemplo "NÃO FUNCIONA", se você comentar,INSERT
ficará com uma declaração inválida. Isso não será executado:Faça o mesmo com a instrução de funcionamento e ela ainda será executada.
Existe uma maneira melhor? Se os valores das duas tabelas não se sobrepuserem
UNION ALL
, algum processamento será economizado. Dependendo de você, suas contagens de linhas e distorções de duas instruções separadas podem alcançar um melhor desempenho geral. Teria que testar para saber.