首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用分组依据的情况下从MySQL多对多查询中删除重复项?

如何在不使用分组依据的情况下从MySQL多对多查询中删除重复项?
EN

Stack Overflow用户
提问于 2016-06-21 13:02:39
回答 1查看 289关注 0票数 1

长期的听众,第一次打电话的人。

我正在创建一个界面,允许我将所有的运河与英国的一个地区相关联,我需要数据库返回所有运河的列表。如果渠道位于我正在编辑的区域中,则此清单还必须包含渠道ID和桥接表ID。

(我会向你展示它的样子,但显然我作为一个新手只能看到两张图片)

相关表格如下:

canals表: id,name,description等regions表:同上regions_canals表: id,left_id (region),right_id (canal)

在本例中,我正在编辑西米德兰兹郡(region 6)的水渠。我希望MySQL返回所有渠道的列表,并指明某条渠道是否已被指定为位于西米德兰兹郡。

我希望得到这样的结果:

(是的,我知道牛津大学不在西米德兰兹),但我实际得到的是:

在这个例子中,我得到了双Llangollen,牛津和什罗普郡联合渠道。我需要去掉多余的通道,但不是那些对应于区域(left_id) 6的通道。

有人建议这应该是可行的:

代码语言:javascript
复制
SELECT regions_canals.id AS bridge_id, regions.id AS left_id, regions.name AS region_name, canals.id AS right_id, canals.name AS canal_name
FROM canals
LEFT JOIN regions_canals ON regions_canals.right_id = canals.id
LEFT JOIN regions ON regions_canals.left_id = regions.id
GROUP BY canals.id
ORDER BY canal_name;

但这会导致以下MySQL错误消息:

代码语言:javascript
复制
#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'nbb.regions_canals.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这几乎是可行的:

代码语言:javascript
复制
SELECT canals.id, canals.name, IF(
canals.id IN 
    (SELECT canals.id
        FROM canals
        JOIN regions_canals ON regions_canals.right_id = canals.id
        JOIN regions ON regions_canals.left_id = regions.id
        WHERE regions.id = 6), true, false)
AS region from canals
ORDER BY canals.name;

我可以说出西米德兰兹郡有哪些运河,但它不包括bridge_id,如果我想从一个地区(如西米德兰兹)移除一条运河(如牛津),我就需要它。

EN

回答 1

Stack Overflow用户

发布于 2016-06-21 13:25:52

请参考下面的链接,其中包含类似类型的示例- http://www.databasejournal.com/features/mysql/article.php/3911786/Eliminating-Duplicate-Rows-from-MySQL-Result-Sets.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37935941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档