0

我正在使用 MySQL。

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

-----------------------------------
|#|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&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但无济于事。

4

3 回答 3

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 |

看到这个 SQLFiddle

于 2013-08-06T05:06:10.613 回答
0

使用查询本身删除那些“空”值。为此,在您的查询中添加以下行

where XX_STYLE is not null and YY_STYLE is not null

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

于 2013-08-06T05:24:43.247 回答
-1

尝试使用

group_concat(xx_style,yy_style) 

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

于 2013-08-06T05:18:20.777 回答