2017-01-08 1 views
3

Ich verwende 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 Werte haben.TSQL: Wählen Sie eine Reihe von Zeilen, die einen einzigen Spaltenwert teilen

Also, mit den unten stehenden Daten, lassen Sie uns sagen, ich möchte die Ergebnismenge für articlegroup_id mit Wert 684 erhalten. Nur articeids 3107196 und 3100000 passen auf diese. So das Ergebnis Satz wäre:

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

Ebenso, wenn ich die gleiche Abfrage auf articlegroup_id mit dem Wert 112 betreibe ich zu 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) 

Antwort

2

Sie können Verwenden Sie die Unterabfrage, um die articeids für eine arygroupid-ID zu finden, und rufen Sie dann alle Zeilen mit passenden artidids

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

Ein anderer Weg zu verbinden verwendet:

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

Ein anderer Ansatz ein

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

Hier ist eine Möglichkeit, es zu tun zu verwenden ist JOIN:

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 
2

Erstens gibt es keine Version SQL Server 2015

Über die Lösung, verwenden Sie Unterabfrage in where Klausel wie folgt aufgerufen: -

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

Ergebnis: -

enter image description here

1

können Sie verwenden, um sie 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); 
Verwandte Themen