2009-03-25 8 views
0

Je construis des résultats en joignant les tablesSQL créer une table « mapping » temporaire dans une instruction select

select t1.*, t2.col2 from t1, t2 where t1.col1=t2.col1 

est-il un moyen de créer une « ligne » temporaire « de cartographie » de la table dans une instruction select pour les cas où la table t2 n'existe pas?

donc quelque chose comme

select t1.*, tempt2.col2 from t1, (<create temp table>) tempt2 where ... 

J'utilise Oracle

+0

Je ne pense pas que vous utilisez la bonne terminologie. Vous pouvez essayer d'afficher la requête initiale, les exemples de données et la sortie attendue. – NotMe

+0

D'accord. Il y a TOUJOURS un moyen de faire quelque chose. Peut-être pas vraiment propre, rapide ou rapide. Postez des exemples et nous le résoudrons. –

Répondre

3

Table avec 1 ligne:

SELECT t1.*, t2.col2 
FROM t1, 
     (
     SELECT 1 AS col2 
     FROM dual 
     ) t2 

Table avec 0 lignes:

SELECT t1.*, t2.col2 
FROM t1, 
     (
     SELECT 1 AS col2 
     FROM dual 
     WHERE 1 = 0 
     ) t2 

Table avec N lignes:

SELECT t1.*, t2.col2 
FROM t1, 
     (
     SELECT 1 AS col2 
     FROM dual 
     CONNECT BY 
       level <= :N 
     ) t2 
+0

combiné avec le syndicat de Mark Brackett et votre sélection de dual m'a donné la solution.Merci – laurie

0

Je ne sais pas si cela fonctionne dans Oracle, mais recherchez-vous quelque chose comme le pseudocode suivant?

Sélectionnez t1. *, Tempt2.col2 de t1 jointure interne (sélectionnez col2, foo, barre de t2 où bar =?) Tempt2 sur t1.foo = tempt2.foo où. . .

Je suppose que cela ne résout pas vraiment le problème, puisque vous avez dit que table2 (t2) n'existe pas vraiment. Je ne suis pas sûr de ce que vous auriez dans votre table de mappage ou de l'endroit où vous obtiendriez ces données si ce n'est pas à partir d'une table.

0

Je ne suis pas totalement sûr de ce que vous obtenez ici.

Soit ce que vous voulez est le WITH clause par exemple.

WITH tempt2 AS 
    (SELECT x FROM y) 
SELECT t1.*, tempt2.col2 
FROM t1, tempt2 
WHERE ... 

Ou bien si vous utilisez le même SQL sur les différents blocs de données et vous ne pouvez pas être sûr que la table existe réellement, alors vous probablement mieux pour tester sa présence et réagir différemment. Est-il nécessaire de SQL pur ou pouvez-vous utiliser PL/SQL?

2

Je ne suis pas sûr que ce soit ce que vous » re recherche, mais vous pouvez faire plusieurs SELECT avec UNIONs pour obtenir un ta ble

SELECT t1.*, t2.col2 
FROM t1, (
    SELECT 1 as Id, 'Foo' as Col2 
    UNION ALL 
    SELECT 2 as Id, 'Bar' as Col2 
    UNION ALL 
    SELECT 3 as Id, 'FooBar' as Col2 
) t2 
WHERE 
    t1.Id = t2.Id 
+0

a donné la réponse choisie à Quassnoi parce qu'ils avaient moins de karma. Mais votre union a également été utile. Merci – laurie

1

Je sais que cette question est très ancienne. Mais juste pour compléter la réponse, qu'en est-il de la fonction DECODE()?

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm#i1017437

SELECT product_id, 
    DECODE (warehouse_id, 1, 'Southlake', 
         2, 'San Francisco', 
         3, 'New Jersey', 
         4, 'Seattle', 
          'Non domestic') 
    "Location of inventory" FROM inventories 
    WHERE product_id < 1775; 

Tant que la table de mappage est raisonnablement court comme cela semble une solution assez élégante.

Questions connexes