Simplifier une requête SQL

Bonjour,
Je vous présente mon souci je travail sur une BD MySQL et je doit écrire des requêtes pour l’exploiter.

Mon problème se pose sur une requête car celle-ci fonctionne mais elle est vraiment moche (trop longue) je trouve.:frowning:

Je voudrais donc savoir si vous pouvez m’aider à la simplifier :slight_smile:

Voici la requête :


SELECT name
FROM   jos_fbk_requirement
WHERE language = '$file_language' 
AND NOT EXISTS 
	(SELECT jos_fbk_requirement_name
	FROM jos_fbk_failed_mandatory, jos_fbk_report
	WHERE  jos_fbk_requirement.name = jos_fbk_requirement_name
	AND jos_fbk_report_id_report = '$id_report_Fv'
	UNION
	SELECT jos_fbk_requirement_name
	FROM jos_fbk_failed_recommended, jos_fbk_report
	WHERE  jos_fbk_requirement.name = jos_fbk_requirement_name
	AND jos_fbk_report_id_report = '$id_report_Fv')
UNION
SELECT name
FROM   jos_fbk_requirement
WHERE language = 'both' 
AND NOT EXISTS 
	(SELECT jos_fbk_requirement_name
	FROM jos_fbk_failed_mandatory, jos_fbk_report
	WHERE  jos_fbk_requirement.name = jos_fbk_requirement_name
	AND jos_fbk_report_id_report = '$id_report_Fv'
	UNION
	SELECT jos_fbk_requirement_name
	FROM jos_fbk_failed_recommended, jos_fbk_report
	WHERE  jos_fbk_requirement.name = jos_fbk_requirement_name
	AND jos_fbk_report_id_report = '$id_report_Fv')
ORDER BY name ASC;

C’est surtout le 2ème UNION que je voudrais enlever.
Merci de votre aide :jap:
Edité le 16/07/2009 à 21:32

Et si tu fais :

SELECT name
FROM jos_fbk_requirement
WHERE language in( '$file_language', 'both')
AND NOT EXISTS 
	(SELECT jos_fbk_requirement_name
	FROM jos_fbk_failed_mandatory, jos_fbk_report
	WHERE jos_fbk_requirement.name = jos_fbk_requirement_name
	AND jos_fbk_report_id_report = '$id_report_Fv'
	UNION
	SELECT jos_fbk_requirement_name
	FROM jos_fbk_failed_recommended, jos_fbk_report
	WHERE jos_fbk_requirement.name = jos_fbk_requirement_name
	AND jos_fbk_report_id_report = '$id_report_Fv')

Ho nice :bounce:

Merci Sans-Nom (lol ton pseudo) je ne connaissais pas la commande IN ça à l’air bien pratique :).

Enfaite le IN si j’ai bien compris s’apparente à ca => language = (’$file_language’ || ‘both’)

plus ou moins.

v in (ensemble)

=> vérifie que v appartient à l’ensemble de valeur. En pratique, tu peux faire un in sur un select :

select 1
from dual
where id in(select id from table)

Ok merci pour l’aide et le conseil

Je voudrais bien mettre le tag resolu mais je voi pas où est l’option.