2017-01-08 6 views
3

MSSQL Server 2016 Expressを実行しています。特定のarticlegroup_id値を持つすべての行を選択し、一致する行を選択したいとします。articleidTSQL:単一の列値を共有する行のセットを選択します。

したがって、以下のデータを使用して、articlegroup_idの結果セットを値684にしたいとしましょう。 articleidの3107196と3100000のみがこれに一致します。だから、結果セットは次のようになります。

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

私は値112でarticlegroup_idで同じクエリを実行する場合は同様に私が取得したい:

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) 

答えて

2

することはできサブクエリを使用してarticlegroupidを与えるarticleidsを見つけ、次に一致するarticleidsを持つすべての行を取得する

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

もう一つの方法は、結合を使用している:

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 
    ) 

結果::

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

別のアプローチは、ここで登録しよう

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

を使用することですそれを行うための一つの方法です

articleid articlegroup_id 
2106543  110 
2106543  112 
2106999  110 
2106999  112 
2

まず、そこソリューションについてSQL Server 2015

呼ばnoバージョンは、ありません。このようwhere句でサブクエリを使用します -

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

結果: -

enter image description here

1

あなたはそれを行うために存在する:

select * products_category_mapping products1 
where exists (select null from products_category_mapping products2 
where products1.articleid = products2.articleid 
and products2.articlegroup_id = 684); 
関連する問題