V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Rokaki
V2EX  ›  程序员

问一下有关多对多关系查询的问题

  •  
  •   Rokaki · 2022-09-13 17:36:42 +08:00 · 1139 次点击
    这是一个创建于 807 天前的主题,其中的信息可能已经有所发展或是发生改变。
    图片一张表,标签一张表
    它们之间多对多关联起来,现在我想查询同时含有标签 a,b 的图片。
    eg,图片 1 含有标签 a ;图片 2 含有标签 b ;图片 3 含有标签 a,b 。
    怎么把图片 3 查询出来
    5 条回复    2022-09-13 20:14:27 +08:00
    seth19960929
        1
    seth19960929  
       2022-09-13 18:49:48 +08:00
    select img_id from relations_table where tag_id='a' and tag_id='b' limit 1
    j0hnj
        2
    j0hnj  
       2022-09-13 19:05:28 +08:00
    create table images (id int, url varchar(100));
    create table tags (id int, tag varchar(10));
    create table image_tags (image_id int, tag_id int);

    insert into images values (1, 'image_1'), (2, 'image_2'), (3, 'image_3');
    insert into tags values (1, 'tag_a'), (2, 'tag_b');
    insert into image_tags values (1,1),(2,2),(3,1),(3,2);

    select T.id, T.url from (select images.id, images.url from images inner join image_tags on images.id = image_tags.image_id inner join tags on tags.id = image_tags.tag_id where tags.tag = 'tag_a') T inner join image_tags on T.id = image_tags.image_id inner join tags on tags.id = image_tags.tag_id where tags.tag = 'tag_b';
    j0hnj
        3
    j0hnj  
       2022-09-13 19:28:44 +08:00
    eason1874
        4
    eason1874  
       2022-09-13 20:05:10 +08:00
    经典场景,不会可以参考 WordPress 的关系表设计
    FYFX
        5
    FYFX  
       2022-09-13 20:14:27 +08:00
    等价与含标签 a 的图片的表和含标签 b 的图片的表做 inner join
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3488 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:19 · PVG 19:19 · LAX 03:19 · JFK 06:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.