RICHEER COCA 2022-05-22 06:59 采纳率: 93.9%
浏览 63
已结题

2个表查询的字段GroupID和Card_ID个数不一样,题主的查询得到结果不对,,请专家答疑解惑

已知条件A:
表#LIST是队员的信息,有8个字段的信息,如何通过8个字段的数据,查询对应的结果?

要求: #team里的任意8个字段的数据 必须是和表#LIST8个字段的数据完全相同

脚本随后上传(题主的脚本效率太低)

  • 写回答

4条回答 默认 最新

  • leaf_cq 2022-05-23 10:45
    关注

    1、如果#LIST和#team中的Card_ID和GroupID乱序存储,那直接通过你的方法的OR条件需要写10个中取3个的组合数量的OR条件才能完成所有可能的组合的判定(即满足你要求中的“……任意……”的条件,这种不仅难得写,还容易出错……针对这种存储方式,我的方法与楼上的一样,都是通过列转行来实现的

    2、如果#LIST和#team中的Card_ID和GroupID按字段序号乱序存储且中间不跳号,就如你的样例数据一样,那就比较简单了,你只需要三组OR条件就能筛选出想要的结果

    -- 乱序存储
         WITH tm AS (
                SELECT id, CLASS, GroupID1 gid FROM #team UNION ALL SELECT id, CLASS, GroupID2 gid FROM #team UNION ALL SELECT id, CLASS, GroupID3 gid FROM #team UNION ALL SELECT id, CLASS, GroupID4 FROM #team UNION ALL
                SELECT id, CLASS, GroupID5 gid FROM #team UNION ALL SELECT id, CLASS, GroupID6 gid FROM #team UNION ALL SELECT id, CLASS, GroupID7 gid FROM #team UNION ALL SELECT id, CLASS, GroupID8 FROM #team UNION ALL
                SELECT id, CLASS, GroupID9 gid FROM #team UNION ALL SELECT id, CLASS, GroupID10 gid FROM #team )
            , li AS (
                SELECT ID, Card_ID1 cid FROM #LIST UNION ALL SELECT ID, Card_ID2 cid FROM #LIST UNION ALL SELECT ID, Card_ID3 cid FROM #LIST UNION ALL SELECT ID, Card_ID4 cid FROM #LIST UNION ALL
                SELECT ID, Card_ID5 cid FROM #LIST UNION ALL SELECT ID, Card_ID6 cid FROM #LIST UNION ALL SELECT ID, Card_ID7 cid FROM #LIST UNION ALL SELECT ID, Card_ID8 cid FROM #LIST )
            , tj AS (
                SELECT tm.id
                  FROM tm JOIN li ON tm.gid = li.cid GROUP BY tm.id, li.ID HAVING COUNT( 1 ) = 8 )
        SELECT * FROM #team a WHERE EXISTS( SELECT 1 FROM tj b WHERE a.id = b.id );
    
    
    -- 顺序存储
        SELECT *
          FROM #team a
         WHERE EXISTS( SELECT 1 FROM #LIST b
                        WHERE ( a.GroupID1 = b.Card_ID1 AND a.GroupID8 = b.Card_ID8 )
                           OR ( a.GroupID2 = b.Card_ID1 AND a.GroupID9 = b.Card_ID8 )
                           OR ( a.GroupID3 = b.Card_ID1 AND a.GroupID10 = b.Card_ID8 ) )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月29日
  • 已采纳回答 5月29日
  • 修改了问题 5月22日
  • 修改了问题 5月22日
  • 展开全部

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持