gpt4 book ai didi

mysql - 如何在不使用 Group By 的情况下从 MySQL 多对多查询中删除重复项?

转载 作者:行者123 更新时间:2023-11-30 22:16:59 25 4
gpt4 key购买 nike

长期倾听者,第一次来电者。

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

(我会向您展示它的外观,但显然我作为新手仅限于两张图片)

相关表格如下:

运河表:id、名称、描述等
地区表:同上
region_canals 表:id、left_id(区域)、right_id(运河)

在此示例中,我正在编辑西米德兰兹郡(6 区)的运河。我希望 MySQL 返回所有运河的列表,其中指明运河是否已被指定为位于西米德兰兹郡。

我想要这样的结果:

The ideal result

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

Notice duplicate rows

在这个例子中,我得到了双 Llangollen、Oxford 和 Shropshire Union 运河。我需要去掉多余的运河,但不是那些与区域 (left_id) 6 相对应的运河。

有人建议这应该有效:

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 错误消息:
#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

这几乎有效:
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,如果我想从某个地区(如西米德兰兹郡)移除运河(如牛津),我需要它。

最佳答案

关于mysql - 如何在不使用 Group By 的情况下从 MySQL 多对多查询中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com