开发者社区> 问答> 正文

这样的SQL应该怎么写?:报错

有一个表(假设叫user)里面有id和另外三个字段(name1,name2,name3),这三个字段从业务角度讲只能有一个有值;也就是说三个字段中有一个是有值的,另外两个就是空。

如果想查询ID和不为空的那一个字段,结果显示成两列,该如何写这个SQL呢?

展开
收起
kun坤 2020-06-09 22:07:10 278 0
1 条回答
写回答
取消 提交回答
  • ######找到了,用两遍isnull就可以了######回复 @554330833a : 确实是,所以我在where里面又判断了一下######回复 @大智若愚90 : isnull不能查询出不为空的字段,只是替换这个字段的值,这个空字段还是会被查询出来的######利用ifnull+concat不更好吗######不懂,sql怎么写######

    switch when *** then  

             when *** then 

          end 这么判断不行么

    ######果然是大神,我想不到就用isnull怎么确定只查询出不为空的字段,像上面所说的怎么样也要select name1 name2 name3三个字段,isnull只是替换这个字段查询出来的值而已######SELECT
    id,
    ISNULL(name1, ISNULL(name2, name3)) AS name
    FROM
    test
    WHERE

    ISNULL(name1, ISNULL(name2, name3)) IS NOT NULL

    最后大概是这样解决的

    ######其是你这个表结构的设计就有问题,三个字段只能有一个有值,就代表一个字段就能搞定了,还非得设计三个字段######直接 SELECT ID,CONCAT(IFNULL(NAME1,''),IFNULL(NAME2,''),IFNULL(NAME3,'')) AS NAME FROM `user`######

    引用来自“太黑的忧郁情怀”的评论

    其是你这个表结构的设计就有问题,三个字段只能有一个有值,就代表一个字段就能搞定了,还非得设计三个字段
    合并为一个字段处理起来非常方便,然而不同的字段在这肯定是代表不同的东西,合在一起逻辑上说不通,难以....两全其美######恩。这是三个表,我只是简单说一下需求
    2020-06-09 22:07:14
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载