sql >> Database >  >> RDS >> Database

2 manieren om rijen te selecteren die overeenkomen met alle items in een lijst (T-SQL)

In dit artikel worden twee manieren gepresenteerd om rijen te selecteren op basis van een lijst met id's (of andere waarden) in SQL Server. Dit kan handig zijn in scenario's waarin u een door komma's gescheiden lijst met ID's heeft en u in uw database wilt zoeken naar rijen die overeenkomen met die ID's.

Stel dat u de volgende lijst met ID's heeft:

1,4,6,8

En dus wilt u nu een tabel opvragen voor records die een van die waarden hebben (d.w.z. 1, 4, 6 of 8) in de ID-kolom.

Hier zijn twee manieren om dat te doen.

Optie 1:De IN-operator

Een optie is om de IN . te gebruiken operator binnen uw zoekopdracht om alleen die rijen te retourneren die in de lijst zijn opgegeven.

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistId IN (1,4,6,8);

Resultaten:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Zoals u kunt zien, zijn de waarden in de ArtistId kolom overeenkomen met die in de lijst.

Optie 2:De STRING_SPLIT() Functie

Vanaf SQL Server 2016, de STRING_SPLIT() functie kan worden gebruikt om een ​​tekenuitdrukking te splitsen met een opgegeven scheidingsteken. Met andere woorden, u kunt het gebruiken om een ​​door komma's gescheiden lijst te splitsen.

Hier is een voorbeeld met dezelfde gegevens als in het vorige voorbeeld:

SELECT ArtistId, ArtistName
FROM Artists
JOIN STRING_SPLIT('1,4,6,8', ',')
ON value = ArtistId;

Resultaat:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Een voordeel van  STRING_SPLIT() is dat het u toestaat/(vereist) om te specificeren wat wordt gebruikt als scheidingsteken voor de lijst. Dit kan handig zijn als uw lijst een ander teken als scheidingsteken gebruikt.

Hier is hetzelfde voorbeeld, maar voor een door spaties gescheiden lijst:

SELECT ArtistId, ArtistName 
FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') 
ON value = ArtistId;

Resultaat:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Compatibiliteitsniveau

Merk op dat STRING_SPLIT() is alleen beschikbaar op databases met een compatibiliteitsniveau van 130 of hoger. U kunt het compatibiliteitsniveau van een database wijzigen met de volgende instructie:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Of om het op SQL Server 2017-niveau te brengen:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Waar MyDatabase is de naam van de database.

Zie ook Hoe u het compatibiliteitsniveau van een database in SQL Server kunt controleren.


  1. De binnenkant van WITH ENCRYPTIE

  2. MYSQL OR vs IN-prestaties

  3. Salesforce SOQL van Windows PowerShell

  4. Optioneel argument in PL/pgSQL-functie