Andy_down 2015-12-08 22:29 采纳率: 0%
浏览 1527

sql查询问题求大神解答

我现在有A表,字段(a_id,a_name,b_id,a_title),B表,字段(b_id,b_name,b_month)
两个表通过 b_id 这个字段关联。
我现在查询得到:select a_id,b_name,b_month,a_title from 表A left join 表B on B.b_id = A.b_id
现在得到B表关联数据【为空】的时候,那么查询出来是:
1,'','',我的主页
现在得到B表关联数据【不为空】的时候,那么查询出来是:
2,'B的名字','12月',我的主页

现在得到B表关联数据【不为空】的时候,我现在想要查询的结果是:
2,'B的名字','11月',我的主页
1,'','',我的主页

只要月份不是12月我就要查询下一条数据【1,'','',我的主页】。如果关联数据包含了12月就不需要【1,'','',我的主页】这条数据。 怎么实现呢?

  • 写回答

5条回答 默认 最新

  • DV2 2015-12-08 23:41
    关注

    先理解下你的意思:
    你是说:当left join的出来的整个数据集中含有12月的时候你就不需要【1,'','',我的主页】吗?
    当left join出来的整个数据不含有12月份的时候你就需要判断记录是否等于【1,'','',我的主页】。是这么理解吗

    评论
  • tobe_intelligent 2015-12-08 23:52
    关注

    加一个触发器
    create trigger i1 on zg for select as 
    if ( 月份不是12月份 && ) select 下一条数据

    评论
  • 月苍 2015-12-08 23:53
    关注

    完善一下你的语言逻辑吧。。看着都累

    评论
  • DV2 2015-12-09 00:37
    关注

    那这个问题就简单了:
    你就是要去某个表的全部月份数据,
    然后判断是否有当前月(例如当前12月),
    如果有的话不做任何处理,
    如果没有的话给该数据集添加一条【1,'','',我的主页】表示当月没有

    首先我要跟你说,SQL做这种通过条件判断给结果集新增数据很不方便(不方便不代表不能做)。如果你条件允许尽量在调用SQL的环境中去处理。
    ————————————————————————————————
    SELECT
    1 AS a_id,
    '' AS b_name,
    '' AS b_month,
    '我的主页' AS a_title
    FROM (SELECT count(1) AS cn
    FROM XXXX
    WHERE b_month = '12') t
    WHERE CASE
    WHEN t.cn > 0 THEN
    0
    ELSE
    1
    END = 1
    UNION ALL
    SELECT a_id,b_name,b_month,a_title
    FROM XXXX

    ————————————————————————————
    总结:
    

    你看到我上面SQL处理逻辑了吧。这样处理效率很低,但是如果你是用程序语言去处理的时候只需要union all后面一段即可,
    在读取SQL结果集后面加上一段判断是否存在12月,不存在再给拼接上去即可。
    虽然SQL可以处理但是不建议大家在环境允许的场景下使用。当然如果你我发挥的舞台不是那么大只能用SQL那就用上面的写法吧。

    展开全部

    评论
  • DV2 2015-12-09 00:39
    关注
    SELECT 
                1                        AS a_id,
                ''                        AS b_name,
                ''                        AS b_month,
                '我的主页'          AS a_title
     FROM (SELECT count(1) AS cn
                  FROM XXXX
                 WHERE b_month = '12') t
    WHERE CASE 
                      WHEN t.cn > 0 THEN 
                                 0 
                        ELSE 
                                1 
                 END = 1
    UNION ALL
    SELECT a_id,b_name,b_month,a_title
      FROM XXXX
    
    
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部