2009-09-03 6 views
-1

erreur GOT pour la requête suivante dans MYSQL (de version5.1)quelqu'un peut-il suggérer l'alternance de "intersecter" et "moins" pour MYSQL?

SELECT year,month,sum(fact_1),sum(fact_2),sum(fact_3),sum(fact_4) 
from(
select year,month,fact_1,fact_2,0 as fact_3,0 as fact_4 from table_1 
intersect 
select year,month,0 as fact_1,0 as fact_2,fact_3,fact_4 from table_2 
) as combined_table 
group by month,year 

Erreur ligne avec le code # 1064: -

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la syntaxe droit d'utiliser près de « sélectionner année, le mois, 0 comme fact_1,0 que fact_2, fact_3, fact_4 de table_2) comme ct g » à la ligne 5

mais après requête CONFORME a souhaité Résultat: -

SELECT year,month,sum(fact_1),sum(fact_2),sum(fact_3),sum(fact_4) 
from(
select year,month,fact_1 ,fact_2,0 as fact_3,0 as fact_4 from table_1 
union 
select year,month,0 as fact_1,0 as fact_2,fact_3,fact_4 from table_2 
) as ct 
group by month,year 

Quelqu'un peut-il dire quelle erreur je commets? quelqu'un peut m'aider à comprendre la cause profonde du problème.

Répondre

5

vous pouvez faux INTERSECT assez facilement en utilisant un INNER (auto) JOIN, de cette façon, vous obtenez seulement les lignes des deux resultsets:

SELECT `a`.`id`, `a`.`name` 
     FROM `a` 
INNER JOIN `b` 
    USING (`id`, `name`) 

MINUS peuvent être truquées avec un LEFT JOIN:

SELECT DISTINCT `a`.`id`, `a`.`name` 
     FROM `a` 
LEFT JOIN `b` 
    USING (`id`, `name`) 
    WHERE `b`.`id` IS NULL 
+0

@ knittl, merci pour la réponse, y at-il une autre solution –

+3

pourquoi avez-vous une solution de rechange lorsque vous avez un travail? des solutions alternatives utiliseraient 'NOT IN' ou 'NOT EXISTS' – knittl

+0

il y a certaines exigences spécifiques de mon projet, je peux effectuer des opérations sur les 2 requêtes INNER SELECT seulement ... Je sais que c'est étrange c'est une limitation de mon API –

0

MySQL ne prend pas en charge le mot clé INTERSECT. La syntaxe complète de SELECT pour 5.1 est ici:

http://dev.mysql.com/doc/refman/5.1/en/select.html

+0

@ david, pouvez-vous tel Je comment réécrire cette requête en cours pour atteindre le résultat souhaité –

Questions connexes