从ResultSet中删除NULL

时间:2013-08-06 05:04:03

标签: mysql sql null

我正在使用MySQL。

我使用带有连接等的select生成了以下结果集但是我希望尽可能删除空值并产生类似于第二个表的结果。

-----------------------------------
|#|IMG_KEY|IMAGE|XX_STYLE|YY_STYLE|
-----------------------------------
|1|   1   |PIX01| <NULL> | STYLEB |
|2|   1   |PIX01| STYLEA | <NULL> |
|3|   2   |PIX02| <NULL> | STYLEB |
|4|   2   |PIX02| STYLEA | <NULL> |
|5|   3   |PIX03| <NULL> | STYLEB |
|6|   3   |PIX03| STYLEA | <NULL> |
-----------------------------------

注:XX_STYLE&amp; YY_STYLE是计算列。

-----------------------------------
|#|IMG_KEY|IMAGE|XX_STYLE|YY_STYLE|
-----------------------------------
|1|   1   |PIX01| STYLEA | STYLEB |
|2|   2   |PIX02| STYLEA | STYLEB |
|3|   3   |PIX03| STYLEA | STYLEB |
-----------------------------------

是否可以使用GROUP BY和/或HAVING等关键字的某种组合来执行此操作。我试过COALESCE,但无济于事。

3 个答案:

答案 0 :(得分:1)

尝试使用GROUP_CONCAT()

SELECT MIN(ID) ID, IMG_KEY, IMAGE
  ,GROUP_CONCAT(XX_STYLE) XX_STYLE
  ,GROUP_CONCAT(YY_STYLE) YY_STYLE
FROM MyTable
GROUP BY IMG_KEY, IMAGE

结果:

| ID | IMG_KEY | IMAGE | XX_STYLE | YY_STYLE |
----------------------------------------------
|  1 |       1 | PIX01 |   STYLEA |   STYLEB |
|  3 |       2 | PIX02 |   STYLEA |   STYLEB |
|  5 |       3 | PIX03 |   STYLEA |   STYLEB |

要从1开始获取行号,请尝试:

SELECT @Row:=@Row+1 AS ID, IMG_KEY, IMAGE
  ,GROUP_CONCAT(XX_STYLE) XX_STYLE
  ,GROUP_CONCAT(YY_STYLE) YY_STYLE
  FROM MyTable
     , (SELECT @Row:=0) r
GROUP BY IMG_KEY, IMAGE

结果:

| ID | IMG_KEY | IMAGE | XX_STYLE | YY_STYLE |
----------------------------------------------
|  1 |       1 | PIX01 |   STYLEA |   STYLEB |
|  2 |       2 | PIX02 |   STYLEA |   STYLEB |
|  3 |       3 | PIX03 |   STYLEA |   STYLEB |

请参阅this SQLFiddle

答案 1 :(得分:0)

使用查询本身删除这些'null'值。为此,在查询中添加以下行

where XX_STYLE is not null and YY_STYLE is not null

如果您提供查询,那么我会给您完整的查询

答案 2 :(得分:-1)

尝试使用

group_concat(xx_style,yy_style) 

尝试验证空值。由于这些空值,您将来可能会遇到错误。