我需要根据其他查询的结果编写sql查询。
考虑表数据:
id attribute
1 a
1 b
2 a
3 a
3 b
3 c
我想编写查询以在属性集上选择id。 我的意思是首先我需要使用此查询检查id 1的属性:
select attribute from table where id = 1
然后根据这个结果我需要选择属性的子集。就像我们的情况一样,1(a,b)是3(a,b,c)的子集。我的查询应该在该案例中返回3。
如果我想检查2(a)的基础,它是1(a,b)和3(a,b,c)的子集,它应该返回1和3.
我希望,这是可以理解的。 :)
答案 0 :(得分:2)
您可以使用此查询。 逻辑很简单:如果A中没有任何项目且不在B中 - > A是B的子集。
DECLARE @SampleData AS TABLE
(
Id int, attribute varchar(5)
)
INSERT INTO @SampleData
VALUES (1,'a'), (1,'b'),
(2,'a'),
(3,'a'),(3,'b'),(3,'c')
DECLARE @FilterId int = 1
;WITH temp AS
(
SELECT DISTINCT sd.Id FROM @SampleData sd
)
SELECT * FROM temp t
WHERE t.Id <> @FilterId
AND NOT EXISTS (
SELECT sd2.attribute FROM @SampleData sd2
WHERE sd2.Id = @FilterId
AND NOT EXISTS (SELECT * FROM @SampleData sd WHERE sd.Id = t.Id AND sd.attribute = sd2.attribute)
)
演示链接:Rextester
答案 1 :(得分:1)
我会分三步给出一个查询:首先我得到所需id
的属性,这是你写的查询
select attribute from table where id = 1
然后我会得到所需id
select count(distinct attribute) from table where id = 1
最后我将上述结果用作过滤器
select id
from table
where id <> 1 and
attribute in (
select attribute from table where id = 1 /* Step 1 */
)
group by id
having count(distinct attribute) = (
select count(distinct attribute) from table where id = 1 /* Step 2 */
)
这将为您提供最初提供的id's
中attributes
个id
的所有id
等于初始np.max()
的数字。