这样的SQL应该怎么写?

哎码 发布于 2016/11/03 14:37
阅读 399
收藏 0

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

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

加载中
0
哎码
哎码
找到了,用两遍isnull就可以了
哎码
哎码
回复 @554330833a : 确实是,所以我在where里面又判断了一下
554330833a
554330833a
回复 @大智若愚90 : isnull不能查询出不为空的字段,只是替换这个字段的值,这个空字段还是会被查询出来的
大智若愚90
大智若愚90
利用ifnull+concat不更好吗
554330833a
554330833a
不懂,sql怎么写
0
捭阖纵_横_

switch when *** then  

         when *** then 

      end 这么判断不行么

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

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

最后大概是这样解决的

0
太黑_thj
太黑_thj
其是你这个表结构的设计就有问题,三个字段只能有一个有值,就代表一个字段就能搞定了,还非得设计三个字段
0
只道寻常
只道寻常
直接 SELECT ID,CONCAT(IFNULL(NAME1,''),IFNULL(NAME2,''),IFNULL(NAME3,'')) AS NAME FROM `user`
0
路边乞丐
路边乞丐

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

其是你这个表结构的设计就有问题,三个字段只能有一个有值,就代表一个字段就能搞定了,还非得设计三个字段
合并为一个字段处理起来非常方便,然而不同的字段在这肯定是代表不同的东西,合在一起逻辑上说不通,难以....两全其美
哎码
哎码
恩。这是三个表,我只是简单说一下需求
返回顶部
顶部