更改查询以允许每行一种类型的列值

时间:2015-04-24 14:42:10

标签: mysql sql innodb

enter image description here

我正在尝试从上面的结果表中删除第三行。 返回包含第三行(恰好是上面的结果表)的数据的查询是:

SELECT service.code, line, service.region
FROM service
INNER JOIN pattern ON pattern.service = service.code

上述查询需要更改为:"选择区域 EM或Y区域的行,您不能拥有两行{{1 },你只能有region一个line(不需要能够选择优先于EM或Y(还有几个地区))。

如上所述,查询应该留下这些结果:

enter image description here

PS:对于糟糕的头衔很抱歉,我很难想出一个简单的方法来描述我上面提到的内容,编辑欢迎。

1 个答案:

答案 0 :(得分:1)

SELECT service.code, line, MAX(service.region) AS region
FROM service
INNER JOIN pattern ON pattern.service = service.code
WHERE region IN ('Y', 'EM')
GROUP BY service.code, line
HAVING SUM(region IN ('Y', 'EM')) = 1;

HAVING子句“计算”每组的行数并过滤那些找到多个地区的行。

SELECT子句中区域的聚合函数只是为了满足规则“要么在group by子句中具有相同的列,要么应用聚合函数”。虽然MySQL允许这样做,但我并不是它的忠实粉丝,因为它导致了一个随机的排除。您也可以使用MIN(),这里没有什么区别。

(回答评论:)另一种选择是

...
HAVING COUNT(DISTINCT region) = 1;