更改查询以允许每行一种类型的列值
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;
我正在尝试从上面的结果 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;