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

Change query to allow one type of column value per row

我正在尝试从上面的结果 table 中删除第三行。 returns包含第三行数据的查询(就是上面的table结果)是这样的:

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

上面的查询需要更改为:“Select lines with a region of either EM or Y region, you can't have a line with两个 region,你只能有一个 line 和一个 region(不需要能够选择优先于 EM 或 Y(还有更多区域))。

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

PS:抱歉标题不好,很难想出一个简单的方法来描述我上面的问题,欢迎编辑。

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 子句 "counts" 每组的行并过滤找到多个区域的行。

SELECT子句中region的聚合函数只是为了满足规则"either you have the same column in the group by clause or apply an aggregate function"。虽然 MySQL 允许这样做,但我不太喜欢它,因为它会导致随机排在组之外。您也可以使用 MIN(),这里没有区别。

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

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