2010-06-09 7 views
2

Je dois interroger à partir de deux tables et je veux un résultat .. comment puis-je joindre ces deux requêtes?Joindre deux requêtes Oracle

La première requête interroge à partir de deux tables et la seconde n'en est qu'une.

select pt.id,pt.promorow,pt.promocolumn,pt.type,pt.image,pt.style,pt.quota_allowed,ptc.text,pq.quota_left 

from promotables pt,promogroups pg ,promotablecontents ptc ,promoquotas pq where pt.id_promogroup = 1 and ptc.country ='049' and ptc.id_promotable = pt.id and pt.id_promogroup = pg.id and pq.id_promotable = pt.id order by pt.promorow,pt.promocolumn 

select pt.id,pt.promorow,pt.promocolumn,pt.type,pt.image,pt.style,pt.quota_allowed from promotables pt where pt.type='heading' 
+0

Voulez-vous rejoindre les requêtes ou les concaténer? Cela signifie différentes choses en SQL. Une jointure implique généralement des critères de jointure ('select from a join b on a.col = b.col') alors que la concaténation consiste simplement à ajouter les résultats d'une requête à l'autre (par exemple via 'UNION' ou' UNION ALL'). –

Répondre

4

Utilisez UNION ou UNION ALL. Tant que vous avez le même nombre de colonnes et que ce sont des types compatibles qui devraient faire ce que vous voulez.

SELECT pt.id, pt.promorow, pt.promocolumn, pt.type, pt.image, pt.style, pt.quota_allowed, ptc.text, pq.quota_left 
FROM promotables pt, promogroups pg, promotablecontents ptc, promoquotas pq 
WHERE pt.id_promogroup = 1 
AND ptc.country ='049' 
AND ptc.id_promotable = pt.id 
AND pt.id_promogroup = pg.id 
AND pq.id_promotable = pt.id 
UNION 
SELECT pt.id, pt.promorow, pt.promocolumn, pt.type, pt.image, pt.style, pt.quota_allowed, NULL, NULL 
FROM promotables pt 
WHERE pt.type='heading' 
ORDER BY 2, 3 

Si vous souhaitez afficher les doublons (lignes identiques de par exemple provenant des deux requêtes), utilisez UNION ALL

+0

pour la première requête, les colonnes de résultat sont plus nombreuses. – coder247

+0

Sélectionnez simplement NULL pour les colonnes de l'autre requête. Cela signifie que vous obtiendrez toujours la colonne et que les résultats de la requête 1 peuvent contenir des données alors que les lignes de la requête 2 contiendront toujours la valeur NULL pour ces colonnes. –