tipos - union en sql
SQL-combinación interna de 2 tablas pero devuelve todo si 1 tabla está vacía (3)
Tengo 2 tablas que dicen A y B, y quiero unirme a ellas.
La Tabla A siempre tendrá registros en ella.
Cuando la tabla B tiene filas, quiero que la consulta gire todas las filas en las que coinciden la tabla A y la tabla B. (es decir, se comportan como unión interna)
Sin embargo, si la tabla B está vacía, me gustaría devolver todo de la tabla A.
¿Es esto posible hacer en 1 consulta?
Gracias.
Me encontré con la misma pregunta y, como nunca fue respondida, publico una solución dada a este problema en otro lugar en caso de que ayude a alguien en el futuro. Ver la fuente .
select *
from TableA as a
left join TableB as b
on b.A_Id = a.A_Id
where
b.A_Id is not null or
not exists (select top 1 A_Id from TableB)
Prueba esto
SELECT t1.* FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.something = t2.someotherthing UNION SELECT * FROM table1 WHERE something = somethingelse;
Sí, para obtener resultados como este, use LEFT JOIN
.
Básicamente, lo que INNER JOIN
hace es solo devuelve una fila donde tiene al menos una coincidencia en la otra tabla. El LEFT JOIN
, por otro lado, devuelve todos los registros en la tabla lateral izquierda si no coinciden en la otra tabla.
Para obtener más información sobre las uniones, visite el siguiente enlace: