2017-01-08 3 views
3

Я запускаю MSSQL Server 2016 Express. Я хочу выбрать все строки с определенным значением articlegroup_id и выбрать строки, соответствующие значениям articleid.TSQL: выберите набор строк, разделяющих одно значение столбца

Таким образом, используя следующие данные, скажем, хочу получить результирующий набор для articlegroup_id со значением 684. Совместим только с материалами 3107196 и 3100000. Таким образом, результирующий набор будет:

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

Точно так же, если я запускаю тот же запрос на articlegroup_id со значением 112 Я хочу получить:

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

Вы можете используйте подзапрос, чтобы найти товарные статьи для получения статьигруппы, а затем получить все строки с соответствующими артикулами

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

Другой способ использует присоединиться:

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

Вот один из способов сделать это:

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 
    ) 

Результаты:

articleid articlegroup_id 
2106543  110 
2106543  112 
2106999  110 
2106999  112 
2

Во-первых, Там нет версии под названием SQL Server 2015

О решении использовать подзапрос в 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); 
Смежные вопросы