我正在尝试从上面的结果表中删除第三行。 返回包含第三行(恰好是上面的结果表)的数据的查询是:
SELECT service.code, line, service.region
FROM service
INNER JOIN pattern ON pattern.service = service.code
上述查询需要更改为:"选择区域 EM或Y区域的行,您不能拥有两行{{1 },你只能有region
一个line
(不需要能够选择优先于EM或Y(还有几个地区))。
如上所述,查询应该留下这些结果:
PS:对于糟糕的头衔很抱歉,我很难想出一个简单的方法来描述我上面提到的内容,编辑欢迎。
答案 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;