TSQL: Wählen Sie Satz von Zeilen aus, die einen einzelnen Spaltenwert teilen

Ich laufe MSSQL server 2016 Express. Ich möchte alle Zeilen auswählen, die einen bestimmten articlegroup_id Wert haben und die Zeilen auswählen, die übereinstimmende articleid verfügen.

Also, mit den untenstehenden data, sagen wir mal, ich möchte das Resultat für articlegroup_id mit Wert 684 erhalten. Nur Artikelid's 3107196 und 3100000 passen dazu. Also die Ergebnismenge wäre:

 3100000 129 3100000 144 3100000 684 3107196 129 3107196 144 3107196 684 

Ähnlich, wenn ich die gleiche Abfrage auf articlegroup_id mit Wert 112 Ich möchte bekommen:

 2106543 110 2106543 112 2106999 110 2106999 112 

DDL

 CREATE TABLE [dbo].[products_category_mapping]( [articleid] [int] NOT NULL, [articlegroup_id] [int] NOT NULL ) ON [PRIMARY] INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3100000,129) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3100000,144) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3100000,684) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3107196,129) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3107196,144) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3107196,684) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3107100,129) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (3107100,144) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (2106543,110) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (2106543,112) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (2107000,110) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (2106999,110) INSERT INTO products_category_mapping(articleid,articlegroup_id) VALUES (2106999,112) 

Sie können Unterabfrage verwenden, um die Artikel zu finden, um eine Artgruppierung zu geben und dann alle Zeilen mit passenden Artikeln zu erhalten

 select * from products_category_mapping where articleid in ( select articleid from products_category_mapping where articlegroup_id = 684 ) 

Ein anderer path ist:

 select p1.* from products_category_mapping p1 inner join products_category_mapping p2 on p1.articleid = p2.articleid and p2.articlegroup_id = 684; 

Ein anderer Ansatz ist, einen JOIN zu verwenden

 Select A.* From [products_category_mapping] A Join ( Select articleid from [products_category_mapping] where articlegroup_id=684 ) B on A.articleid=B.articleid 

Hier ist ein path, es zu tun:

 DECLARE @articlegroup_id int = 112 ;WITH CTE AS ( SELECT articleid FROM products_category_mapping WHERE articlegroup_id = @articlegroup_id ) SELECT articleid, articlegroup_id FROM products_category_mapping main WHERE EXISTS ( SELECT 1 FROM CTE WHERE CTE.articleid = main.articleid ) 

Ergebnisse:

 articleid articlegroup_id 2106543 110 2106543 112 2106999 110 2106999 112 

Erstens gibt es keine Version namens SQL server 2015

Über die Lösung, verwenden Sie Sub-Abfrage in where Klausel wie folgt: –

 select * from [products_category_mapping] where articleid in ( select articleid from [products_category_mapping] where articlegroup_id = 684) 

Ergebnis:-

Bildbeschreibung hier eingeben

Du kannst es verwenden, um zu tun:

 select * products_category_mapping products1 where exists (select null from products_category_mapping products2 where products1.articleid = products2.articleid and products2.articlegroup_id = 684);