Créer une table SQL inline à la volée (pour une jointure à gauche exclue))
supposons ce qui suit:
Tableau
id | value
----------
1 | red
2 | orange
5 | yellow
10 | green
11 | blue
12 | indigo
20 | violet
j'ai une liste d'id (10, 11, 12, 13, 14) qui peut être utilisé pour rechercher des id dans ce tableau. Cette liste d'id est générée dans mon frontend.
en utilisant purement SQL, je dois sélectionner les id de cette liste (10, 11, 12, 13, 14) qui n'ont pas d'entrées dans le tableau A (à joindre dans la colonne "id"). Le résultat devrait être le jeu de résultats de l'id du 13 et 14.
Comment puis-je accomplir ceci en utilisant seulement SQL? (Aussi, j'aimerais éviter d'utiliser une procédure stockée si possible)
la seule approche à laquelle je peux penser est quelque chose qui créerait une table SQL en ligne à la volée pour maintenir temporairement ma liste d'id. Cependant, je n'ai aucune idée de comment faire cela. Est-ce possible? Est-il un meilleur moyen?
Merci! :)
4 réponses
Vous pouvez faire cela à partir de SQL Server 2008 en utilisant un constructeur de valeurs de table.
SELECT * FROM (
VALUES(1, 'red'),
(2, 'orange'),
(5, 'yellow'),
(10, 'green'),
(11, 'blue'),
(12, 'indigo'),
(20, 'violet'))
AS Colors(Id, Value)
Plus d'informations ici: Tableau De La Valeur Constructeur
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