蓝的天启录 2021-06-30 10:53 采纳率: 50%
浏览 146
已采纳

SQL连表查询如何实现部分重复数据为空

在多个表连表查询时可能会出现重复的数据,如何把重复的数据显示为null值。 表usert作为所有表的关系表,表usera和表userb为连接表。表usert重复则不需要为null,但usera或者userb有一个表数据比另外一个表数据多则另外一个表会别拉伸出多一行的数据,希望这一行的数据为null

img

img

CREATE TABLE `usera`  (
  `u_id` int(11) NOT NULL,
  `u_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `u_test` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `t_id` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`u_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;

INSERT INTO `usera` VALUES (1, 'A1', '达瓦达瓦', 1);
INSERT INTO `usera` VALUES (2, 'A2', '达瓦若', 2);
INSERT INTO `usera` VALUES (3, 'A3', '王大伟', 3);
INSERT INTO `usera` VALUES (4, 'A4', '王大伟多', 3);

CREATE TABLE `userb`  (
  `b_id` int(11) NOT NULL,
  `b_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `b_test` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `t_id` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`b_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;


INSERT INTO `userb` VALUES (1, 'B1', 'or供热供热', 3);
INSERT INTO `userb` VALUES (2, 'B2', '瓦特丰东股份', 2);
INSERT INTO `userb` VALUES (3, 'B3', 'wa哇哈哈哈', 1);


CREATE TABLE `usert`  (
  `t_id` int(11) NOT NULL,
  `t_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `t_test` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  PRIMARY KEY (`t_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;

INSERT INTO `usert` VALUES (1, 'T1', 'rrrr');
INSERT INTO `usert` VALUES (2, 'T2', 'erwr');
INSERT INTO `usert` VALUES (3, 'T3', '599');
  • 写回答

5条回答 默认 最新

  • Lymj丶 2021-06-30 11:57
    关注

    简单暴力的解法1:

    select tt.t_id,
    tt.t_name,
    tt.t_test,
    if(flagb='0',null,b_t_id) b_t_id,
    if(flagb='0',null,b_id) b_id,
    if(flagb='0',null,b_name) b_name,
    if(flagb='0',null,b_test) b_test,
    if(flaga='0',null,a_t_id) a_t_id,
    if(flaga='0',null,a_id) a_id,
    if(flaga='0',null,a_name) a_name,
    if(flaga='0',null,a_test) a_test 
    from (
    select t.t_id,
    t.t_name,
    t.t_test,
    a.t_id a_t_id,
    a.u_id a_id,
    a.u_name a_name,
    a.u_test a_test,
    b.t_id b_t_id,
    b.b_id b_id,
    b.b_name b_name,
    b.b_test b_test,
    if(@stra=concat(t.t_id,a.u_id),'0','1') flaga,
    if(@strb=concat(t.t_id,b.b_id),'0','1') flagb,
    @stra:=concat(t.t_id,a.u_id) stra,
    @strb:=concat(t.t_id,b.b_id) strb
    from (select @stra:='',@strb:='') tmp,usert t 
    left join usera a  on a.t_id=t.t_id  
    left join userb b on b.t_id=t.t_id
    ) tt
    order by tt.t_id
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效