8 votes

Alternative à except dans MySQL

Je dois écrire une requête de ce type dans MySQL :

SELECT * 
FROM Tab1
EXCEPT
SELECT * 
FROM Tab1 
WHERE int_attribute_of_Tab1>0

mais MySQL ne supporte pas le mot-clé SAUF . Existe-t-il un mode standard pour utiliser correctement un autre opérateur qui simule le except dans MySQL ?

14voto

Ben Swinburne Points 6771

Vous pouvez utiliser NOT IN

SELECT * 
FROM Tab1
WHERE id  NOT IN (
    SELECT id 
    FROM Tab1 
    WHERE int_attribute_of_Tab1>0
)

2voto

Ryan Gadsdon Points 1195

Essayez ceci

SELECT * 
FROM Tab1
WHERE [....] NOT EXISTS 
(SELECT * 
FROM Tab1 
WHERE int_attribute_of_Tab1>0)

1voto

P.Salmon Points 7017

Quelques définitions SqlServer https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql SAUF Renvoie toutes les valeurs distinctes de la requête à gauche de l'opérateur SAUF qui ne sont pas également renvoyées par la requête de droite. PLsql https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm MINUS combine les résultats avec l'opérateur MINUS, qui ne renvoie que les lignes uniques renvoyées par la première requête mais pas par la seconde

Une traduction pédante en mysql serait la suivante

 SELECT distinct t1.* 
FROM Tab1 as t1
left outer join
(SELECT * 
FROM Tab1 
WHERE int_attribute_of_Tab1>0) as t2 on t1.id = t2.id
where t2.id is null;

En supposant qu'il y ait une colonne id, je n'aimerais pas utiliser la distinction sur un grand nombre de colonnes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X