UNION, EXCEPT, e INTERSECT no MySql

Precisei usar os comandos UNION, EXCEPT, e INTERSECT no MySql, para minha grande surpresa o MySql não da suporte para esses comandos, exceto o Union. E como fazer para ter o resultado esperado sem precisar recorrer a “manobras” fora do MySql? A solução que encontrei foi usando subquery. Seguem abaixo pequenos modelos:

Primeiro um modelo simples apenas entre duas tabelas

EXCEPT

SELECT
  `tabela1`.`cod_barra` as campo1, `tabela2`.`cod_barra` as campo1 FROM
  `tabela1` LEFT JOIN
  `tabela2` ON `tabela2`.`cod_barra` = `tabela1`.`cod_barra`
WHERE `tabela2`.`cod_barra` IS NULL;

INTERSECT

SELECT
  `tabela1`.`cod_barra` as campo1, `tabela2`.`cod_barra` as campo1 FROM
  `tabela1` LEFT JOIN
  `tabela2` ON `tabela2`.`cod_barra` = `tabela1`.`cod_barra`
WHERE `tabela2`.`cod_barra` IS NULL;

Agora uma segunda forma de fazer a mesma coisa entre resultados de consultas ao invés de apenas tabelas.

EXCEPT

SELECT
  `query1`.`codigo`
FROM
  (SELECT `tabela2`.`codigo`
    FROM `tabela2` INNER JOIN
      `tabela1` ON `tabela1`.`codigo` = `tabela2`.`codigo`
    WHERE `tabela1`.`campo` = x) AS `query2`
  RIGHT JOIN
  (SELECT `tabela1`.`codigo`
    FROM `tabela1`
    WHERE `tabela1`.`campo` = x) AS `query1` ON `query2`.`cododigo` =
    `query1`.`codigo`
WHERE
  `query2`.`codigo` IS NULL;

INTERSECT

SELECT
  `query1`.`codigo`
FROM
  (SELECT `tabela2`.`codigo`
    FROM `tabela2` INNER JOIN
      `tabela1` ON `tabela1`.`codigo` = `tabela2`.`codigo`
    WHERE `tabela1`.`campo` = x) AS `query2`
  RIGHT JOIN
  (SELECT `tabela1`.`codigo`
    FROM `tabela1`
    WHERE `tabela1`.`campo` = x) AS `query1` ON `query2`.`cododigo` =
    `query1`.`codigo`
WHERE
  `query2`.`codigo` <> ''

Hermínio Prieto – Programador carioca, residente no Rio de Janeiro. Cursa Ciência da Computação.

Compatilhe esse artigo!

7 thoughts on “UNION, EXCEPT, e INTERSECT no MySql

Leave a Reply

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.