Database
 sql >> Datenbank >  >> RDS >> Database

2 Möglichkeiten zum Auswählen von Zeilen, die mit allen Elementen in einer Liste übereinstimmen (T-SQL)

In diesem Artikel werden zwei Möglichkeiten zum Auswählen von Zeilen basierend auf einer Liste von IDs (oder anderen Werten) in SQL Server vorgestellt. Dies kann in Szenarien nützlich sein, in denen Sie eine durch Kommas getrennte Liste von IDs haben und Ihre Datenbank nach Zeilen abfragen möchten, die mit diesen IDs übereinstimmen.

Angenommen, Sie haben die folgende Liste von IDs:

1,4,6,8

Sie möchten nun also eine Tabelle nach Datensätzen abfragen, die einen dieser Werte (d. h. entweder 1, 4, 6 oder 8) in ihrer ID-Spalte haben.

Hier sind zwei Möglichkeiten, dies zu tun.

Option 1:Der IN-Operator

Eine Möglichkeit ist die Verwendung des IN -Operator in Ihrer Abfrage, um nur die Zeilen zurückzugeben, die in der Liste angegeben sind.

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

Ergebnisse:

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

Wie Sie sehen können, sind die Werte in ArtistId Spalte mit denen unserer Liste übereinstimmen.

Option 2:Die STRING_SPLIT()-Funktion

Beginnend mit SQL Server 2016, der STRING_SPLIT() -Funktion kann verwendet werden, um einen Zeichenausdruck mit einem angegebenen Trennzeichen aufzuteilen. Mit anderen Worten, Sie können damit eine durch Kommas getrennte Liste aufteilen.

Hier ist ein Beispiel mit denselben Daten wie im vorherigen Beispiel:

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

Ergebnis:

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

Ein Vorteil von  STRING_SPLIT() ist, dass es Ihnen erlaubt/(erfordert) anzugeben, was als Trennzeichen für die Liste verwendet wird. Dies kann praktisch sein, wenn Ihre Liste ein anderes Zeichen als Trennzeichen verwendet.

Hier ist das gleiche Beispiel, aber für eine durch Leerzeichen getrennte Liste:

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

Ergebnis:

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

Kompatibilitätsstufe

Beachten Sie, dass STRING_SPLIT() ist nur für Datenbanken mit einem Kompatibilitätsgrad von 130 oder höher verfügbar. Sie können den Kompatibilitätsgrad einer Datenbank mit der folgenden Anweisung ändern:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Oder um es auf das Niveau von SQL Server 2017 zu bringen:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Wo MyDatabase ist der Name der Datenbank.

Siehe auch So überprüfen Sie den Kompatibilitätsgrad einer Datenbank in SQL Server.