代码之家  ›  专栏  ›  技术社区  ›  Ales

按阵列选择数据。sql语言

  •  0
  • Ales  · 技术社区  · 10 年前

    我有三张桌子: 新闻

    news_id | other fields..
    

    标签

    tag_id | other fields.. 
    

    和连接表TAGS_NEWS

    tag_id | news_id
    

    我想通过标记从NEWS表中选择数据。但问题是,我应该通过许多标签来选择数据。我只能创建这个问题的一个解决方案,首先通过一个标签选择数据,而不是通过另一个标签从选择的数据中选择数据,依此类推。但我认为这不是解决这个问题的好方法。也许是解决这个问题的最佳方法?也许我可以在一次查询中选择必要的数据?

    例如,NEWS_TAG表:

    tag_id | news_id
        1   1
        3   12
        4   11
        1   10
        6   1
        7   2
        8   3
        9   3
        10  3
    

    按标记选择数据1,6 获取结果: news_id = 1 , 或按标签选择数据8,9 获取结果: news_id = 3

    5 回复  |  直到 10 年前
        1
  •  1
  •   Sonnywhite    10 年前

    我想我遇到了你的问题,我必须解决一个类似的问题。

    尝试此解决方案:

    select *
    from news
    join news_tags on news_tags.news_id = news.id
    where news_tags.tags_id in(1,2)
    group by news.id
    having count(*) = 2
    

    您必须传输到此查询的唯一内容是 tags_id 在我的例子中 1,2 )以及 标签id 在我的例子中 2 ).

    我已经用 SQL Fiddle .

        2
  •  1
  •   Chamara Maduranga    10 年前

    尝试此解决方案

    select a.* from  NEWS a ,TAGS_NEWS b,TAGS c
    where a.news_id = b.news_id
    and b.tag_id = c.tag_id
    and c.tag_id in ('id0001','id0002')
    

    你只需要传递你需要的标签id。

        3
  •  0
  •   codework    10 年前
    select * from news where new_id in 
    (select news_id from tagnews where tag_id in 
    (select tag_id from tag where tag_name in (name1,name2)) )
    

    也许这会有所帮助。

        4
  •  0
  •   Rajesh    10 年前

    请尝试一下。

    从新闻n中选择news_id。在n上加入tags_newstn。news_id=tn.news_id,其中tn.tag_id在(1,3,6)中

        5
  •  0
  •   psaraj12    10 年前

    您可以像下面这样概括sonnywhite解决方案

    with tag_ids as ( select tag_id from tags where tag_id in (1,6)),
    tag_id_cnt as ( select count(1) cnt from tag_ids)
     select * from news,tag_id_cnt where (news_Id,cnt) in 
     (select news_Id, count(1) from news_tags a, tag_ids b
    Where a.tag_id=b.tag_Id
    Group by news_Id)