2010-12-10 7 views
0

Je dois joindre les résultats de deux requêtes horizontalement. Considérons une requête ci-dessous qui renverra deux lignes:Joindre deux requêtes sql côte à côte sans colonne commune

Select * 
    from Salary 
where sal > 10000 

Le résultat de la requête ci-dessus doivent être accolées avec le résultat de la requête ci-dessous qui sera de nouveau retourner deux rows.Or je dois juste concaténer les deux ensembles de résultats:

Select 'xyz' from dual 
union 
Select 'abc' from dual 

S'il vous plaît indiquer comment cela peut se faire comme je l'ai essayé de le faire avec la requête ci-dessous, mais il renvoie un produit cartésien:

Select * 
    from (Select * 
      from salary 
     where sal > 10000) TEMP1, 
     (Select 'xyz' from dual 
     union 
     Select 'abc' from dual) TEMP2 
+2

Pourriez-vous être plus clair sur ce que vous souhaitez que votre jeu de résultats pour ressembler, si vous ne voulez pas une jointure croisée? –

Répondre

0

vous pouvez introduire une colonne de jointure artificielle:

SELECT * 
    FROM (SELECT s.*, ROWNUM ID FROM Salary s WHERE sal > 10000) q1 
    JOIN (SELECT 'xyz' col1, 1 ID 
      FROM dual 
     UNION 
     SELECT 'abc' col1, 2 ID FROM dual) q2 ON q1.id = q2.id 
2

Vous pouvez le faire en se joignant à rownum comme ceci:

SELECT * 
FROM 
    (SELECT view_name, rownum AS r FROM all_views WHERE rownum <=10) 
    FULL OUTER JOIN (SELECT table_name, rownum AS r FROM all_tables WHERE rownum <=10) USING (r) 

Dans votre cas, cela ressemblerait (non testé):

Select * from 
    (Select salary.*, rownum AS r from salary where sal>10000) TEMP1 
    FULL OUTER JOIN 
    (SELECT temp2.*, rownum r FROM 
     (Select 'xyz' from dual 
     union 
     Select 'abc' from dual) TEMP2) 
    USING (r) 
+0

Dans votre première requête pouvez-vous vous référer à la colonne de la requête 1 dans la requête 2? Je sais que cela va faire une erreur, mais y a-t-il un moyen de le faire? – Mukus

0

Merci beaucoup pour votre aide.

Mais ce dont j'ai besoin est un peu compliqué. Je l'ai mis à jour la requête précédente d'être un peu comme ci-dessous au lieu de requête simple que j'ai posté avant (SELECT * FROM Salary WHERE sal > 10000):

SELECT name, sal, address 
FROM (SELECT e1.name, s1.sal, s1.grade, s2.address FROM Emp e1, salary s1, 
    (Select empcode, address FROM Address WHERE empcode LIKE 'NY%') s2 
    WHERE e1.hiredate =201001 
    AND s1.sal>10000) 

Je sais la requête ci-dessus ne fait pas beaucoup de pertinence. Cependant, c'est similaire à ce dont j'ai réellement besoin. Je ne poste pas l'original car c'est très compliqué mais si cela peut être fait pour cette requête, alors je serai capable de reproduire la même chose sur l'original.

Merci,

Sharon

+0

Qu'avez-vous fait, vous souvenez-vous? – Mukus

Questions connexes