mysql - tablas - inner join en sql
Cree una tabla de SQL en línea sobre la marcha(para una unión izquierda excluida) (4)
Puede crear una "tabla en línea" con una subconsulta UNION
:
(
SELECT 10 AS id
UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14
-- etc.
) AS inline_table
Supongamos lo siguiente:
Tabla a
id | value
----------
1 | red
2 | orange
5 | yellow
10 | green
11 | blue
12 | indigo
20 | violet
Tengo una lista de identificadores (10, 11, 12, 13, 14) que se pueden usar para buscar identificadores en esta tabla. Esta lista de identificadores se genera en mi interfaz.
Usando puramente SQL, necesito seleccionar los ID de esta lista (10, 11, 12, 13, 14) que no tienen entradas en la Tabla A (unirse en la columna ''id''). El resultado debe ser el conjunto de resultados de ID 13 y 14.
¿Cómo puedo lograr esto usando solo SQL? (Además, me gustaría evitar el uso de un procedimiento almacenado si es posible)
El único enfoque que se me ocurre es algo que crearía una tabla de SQL en línea sobre la marcha para mantener temporalmente mi lista de ID. Sin embargo, no tengo idea de cómo hacer esto. es posible? ¿Hay alguna manera mejor?
¡Gracias! :)
Puede hacer esto desde SQL Server 2008 en adelante usando un constructor de valores de tabla.
SELECT * FROM (
VALUES(1, ''red''),
(2, ''orange''),
(5, ''yellow''),
(10, ''green''),
(11, ''blue''),
(12, ''indigo''),
(20, ''violet''))
AS Colors(Id, Value)
Más información aquí: Table Value Constructor
CREATE TEMPORARY TABLE ids (id INT NOT NULL PRIMARY KEY);
INSERT
INTO ids
VALUES
(10),
(11),
(12),
(13),
(14);
SELECT *
FROM ids
WHERE id NOT IN
(
SELECT id
FROM a
);
create table B (id int)
insert into B values (10),(11),(12),(13),(14)
select *
from B
left join A
on A.id=B.id
where A.id is null
drop table B