Great summary of sql join types:

Source: https://stevestedman.com/
Tal vez se encuentren en la situación, donde deban pasarle una lista variable de parámetros a un sp. Por ejemplo, supongamos que se seleccionan los id de cliente 1,27,345,73 y deben pasarse a un sp que debe consultar los datos de los id de cliente seleccionados.
Tenemos varias soluciones posibles, inclusive, en SQL Server 2008 es posible solucionarlo utilizando un xml pasado por parámetro, pero vamos a aproximar una solución mas general, que nos sirva para diferentes motores.
Lo que hacemos es crear una función, a la que le pasamos la lista de ids separada por comas, y nos devolverá los id en una tabla que utilizaremos para filtrar los ids en la consulta de clientes.
La función:
CREATE FUNCTION intlist_to_tbl (@list nvarchar(MAX)) RETURNS @tbl TABLE (number int NOT NULL) AS BEGIN DECLARE @pos int, @nextpos int, @valuelen int SELECT @pos = 0, @nextpos = 1 WHILE @nextpos > 0 BEGIN SELECT @nextpos = charindex(',', @list, @pos + 1) SELECT @valuelen = CASE WHEN @nextpos > 0 THEN @nextpos ELSE len(@list) + 1 END - @pos - 1 INSERT @tbl (number) VALUES (convert(int, substring(@list, @pos + 1, @valuelen))) SELECT @pos = @nextpos END RETURN END
El procedimiento:
CREATE PROCEDURE consultarListaClientes @ids varchar(50) AS SELECT id, razonsocial FROM clientes inner join intlist_to_tbl(@ids) i ON clientes.id = i.number
La llamada:
EXEC consultarListaClientes '1, 27, 345, 73'
Vale aclarar que esta solución no es la mas rápida, en terminos de velocidad, si la cantidad de ids a consultar es muy grande, será lenta, pero nos servirá para resolver muchas situaciones simples.
Es probable que tengamos varios registros pertenecientes a una columna o campo que debamos concatenar y mostrar en una sola cadena. Algo así:
descripcion =========== valor1 valor2 valor3
y necesitamos obtener algo así:
valor1, valor2, valor3
es decir, como si tuvieramos que trasponer la columna, pero sin complicarnos.
La solución es la siguiente:
DECLARE @valores VARCHAR(1000) SELECT @valores= COALESCE(@valores + ', ', '') + descripcion FROM carpetas select @valores as valores
La magia la hace el comando COALESCE que devuelve la expresión que no contenga el valor NULL entre sus argumentos.
OJO: Esta solución es válida solo si ningún renglon es NULL.
The problem:
We may have several records belonging to a column or field that we want to concatenate and display in a single string. Something like this:
description =========== value1 value2 value3
and we want to get something like this:
value1, value2, value3
that is, as if we had to transpose the column, but without complicating ourselves.
The solution is:
DECLARE @values VARCHAR(1000)
SELECT @values= COALESCE(@values + ', ', '') + description FROM folders
select @values as values
The magic is done by the COALESCE command that returns the expression that does not contain the NULL value among its arguments.
NOTE: This solution is valid only if no row is NULL.
Muchas veces necesitamos hacer un update sobre una tabla con valores de otra tabla, en estos casos, la sintaxis es la siguiente:
update
tablaA
set tablaA.campoA=tablaB.campoZ
from tablaA inner join tablaB on tablaA.campoA=tablaB.campoA
where tablaB.campoC=1
Esta consulta es muy útil para volcar datos de una tabla y/o base a otra tabla y/o base. Su sintáxis es intuitiva, pero siempre queda alguna duda, así que aquí dejamos un ejemplo:
INSERT INTO base1.dbo.archivetitles
(title_id, title, type, pub_id)
SELECT title_id, title, type, pub_id
FROM base2.dbo.titles
WHERE (pub_id = ‘0766’)
Inserta los campos seleccionados de la tabla titles en la base2 a la tabla archivetitles en la base1.