SQL query that gives distinct results that match multiple columns

前端 未结 4 1848
渐次进展
渐次进展 2020-12-03 16:06

Sorry, I couldn\'t provide a better title for my problem as I am quite new to SQL. I am looking for a SQL query string that solves the below problem.

Let\'s assume t

4条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-03 16:58

    Select distinct document_id 
    from {TABLE} 
    where tag in ('tag1','tag2')
    group by id 
    having count(tag) >=2 
    

    How you generate the list of tags in the where clause depends on your application structure. If you are dynamically generating the query as part of your code then you might simply construct the query as a big dynamically generated string.

    We always used stored procedures to query the data. In that case, we pass in the list of tags as an XML document. - a procedure like that might look something like one of these where the input argument would be

    
       tag1
       tag2
    
    
    
    CREATE PROCEDURE [dbo].[GetDocumentIdsByTag]
    @tagList xml
    AS
    BEGIN
    
    declare @tagCount int
    select @tagCount = count(distinct *) from @tagList.nodes('tags/tag') R(tags)
    
    
    SELECT DISTINCT documentid
    FROM {TABLE}
    JOIN @tagList.nodes('tags/tag') R(tags) ON {TABLE}.tag = tags.value('.','varchar(20)')
    group by id 
    having count(distict tag) >= @tagCount 
    
    END
    

    OR

    CREATE PROCEDURE [dbo].[GetDocumentIdsByTag]
    @tagList xml
    AS
    BEGIN
    
    declare @tagCount int
    select @tagCount = count(*) from @tagList.nodes('tags/tag') R(tags)
    
    
    SELECT DISTINCT documentid
    FROM {TABLE}
    WHERE tag in
    (
    SELECT tags.value('.','varchar(20)') 
    FROM @tagList.nodes('tags/tag') R(tags)
    }
    group by id 
    having count( distinct tag) >= @tagCount 
    END
    

    END

提交回复
热议问题