获取空值,而不是查询中的重复值

时间:2018-11-15 17:57:44

标签: mysql

我有一张这样的桌子

|num|id|name|prj|
| 1 | 1|abc | 1 |
| 2 | 1|efg | 1 |
| 3 | 1|cde | 1 |
| 4 | 2|zzz | 1 |

我要运行这样的查询:

SELECT * FROM table WHERE prj=1 ORDER BY name

,但只打印一次重复值。我想保留所有行,我想在数据库级别而不是在表示层上这样做(我知道如何在php中做到这一点。)

期望的结果是

|num|id|name|prj|
| 1 | 1|abc | 1 |
| 3 |  |cde | 1 |
| 2 |  |efg | 1 |
| 4 | 2|zzz | 1 |

关于从哪里开始构建该查询的任何提示?

1 个答案:

答案 0 :(得分:2)

使用会话变量来测试先前的ID是否与当前的ID相同:

SELECT num, IF(@lastid = id, '', @lastid := id) AS id, name, prj
FROM table
CROSS JOIN (SELECT @lastid := null) x
ORDER BY table.id, name

DEMO

请注意,您需要限定table.id,因为ORDER BY默认使用SELECT列表中的别名(如果它与表列相同),并且将对空字段进行排序首先。