Pregunta

Estoy seleccionando 1 campo de 1 tabla y lo guardo en una tabla temporal.

Algunas veces esa tabla termina con 0 filas.

Quiero agregar ese campo en otra tabla que tenga más de 20 campos

La unión regular no funcionará para mí debido a que el campo # no coincide. Exterior no funcionará para mí porque no hay nada para comparar. NVL no funciona en la primera tabla temporal.

¿Alguien sabe cómo hacerlo?

UPDATED:

No pude mencionar ... Cuando la tabla que recupera 1 campo encuentra una coincidencia en otros casos, este código que estoy usando ahora funciona ...

SELECT DISTINCT reqhead_rec.resp_name<br>
FROM reqhead_rec, biglist<br>
WHERE reqhead_rec.req_no = biglist.req_no
 AND reqhead_rec.frm = biglist.req_frm<br>
INTO TEMP grabname with no log;

SELECT biglist.*, grabname.resp_name<br>
FROM biglist, grabname<br>
ORDER BY prnt_item, account_amt<br>
INTO TEMP xxx with no log;
¿Fue útil?

Solución

¿Con qué campo coincidiría? Por cierto, aquí está cómo alinearlos:

SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp
UNION ALL
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable

ACTUALIZACIÓN:

OK, después de leer tu actualización ... no creo que quieras una UNION, sino un SUBSELECTO increíblemente simple

SELECT
    *,
    (SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
    MyTable

Otros consejos

Parece que quieres unirte, no una unión.

No necesitas comparar nada para hacer una unión. Termina con un producto cruzado si no especifica ninguna condición de unión:

SELECT t20.*, t1.*
FROM table_with_20_columns AS t20
  LEFT OUTER JOIN temp_table_with_1_column AS t1 ON (1=1);

Cuando hay cero filas en la tabla temporal, se informará como NULL en el resultado de la consulta anterior.

Sin embargo, si hay varias filas en la tabla temporal, obtendrá el producto cruzado con la primera tabla. No puedo decir de tu pregunta lo que quieres.

editar: La condición de unión expresada en la cláusula ON o USING debe ser opcional de acuerdo con el estándar SQL, pero al menos como I pruébelo en MySQL 5.0, es un error de sintaxis omitir esa cláusula. Pero puede usar ON (1 = 1) .

editar: Respondiendo su pregunta en el comentario:

SELECT COALESCE(reqhead_rec.resp_name, dflt.resp_name) AS resp_name
FROM (SELECT 'default name' AS resp_name) dflt
  LEFT OUTER JOIN reqhead_rec ON (1=1)
WHERE reqhead_rec.req_no = biglist.req_no AND reqhead_rec.frm = biglist.req_frm 
INTO TEMP grabname WITH NO LOG;

En realidad, puede omitir la tabla temporal por completo. Simplemente IZQUIERDA UNIRSE a su tabla principal para reahead_rec . Ponga esas condiciones en la cláusula ON de la unión, no en la cláusula WHERE . Luego use COALESCE () en la lista de selección de esa consulta para dar un nombre predeterminado cuando no se encuentre uno en la otra tabla.

SELECT b.*, COALESCE(r.resp_name, 'default name') AS resp_name
FROM biglist AS b
  LEFT OUTER JOIN reqhead_rec AS r
    ON (b.req_no = r.req_no AND r.frm = b.req_frm)
INTO TEMP xxx WITH NO LOG;

Intente seleccionar nvl (NULL, NULL) para los valores faltantes

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top