gpt4 book ai didi

mysql - mysql一对多连接中的唯一记录没有DISTINCT或GROUP BY

转载 作者:行者123 更新时间:2023-11-30 23:05:35 25 4
gpt4 key购买 nike

这是基本查询:

SELECT
some_columns
FROM
d
JOIN
m ON d.id = m.d_id
JOIN
s ON s.id = m.s_id
JOIN
p ON p.id = s.p_id
WHERE
some_criteria
ORDER BY
d.date DESC
LIMIT 25

m 每个 d_id 可以包含多个 s_id。这是一个 super 简单的例子:

+--------+--------+------+
| id | d_id | s_id |
+--------+--------+------+
| 317354 | 291220 | 642 |
| 317355 | 291220 | 32 |
+--------+--------+------+
2 rows in set (0.00 sec)

我们想要的。但是,很明显,它在此特定查询中生成了重复的 d 记录。

这些表有很多列,由于数据的敏感性,我需要对它们进行编辑,但这是与此查询相关的基本结构:

| d  | CREATE TABLE `d` (
`id` bigint(22) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
KEY `date` (`date`)
) ENGINE=InnoDB |

| m | CREATE TABLE `m` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`d_id` bigint(20) NOT NULL,
`s_id` bigint(20) NOT NULL,
`is_king` binary(1) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `d_id` (`d_id`),
KEY `is_king` (`is_king`),
KEY `s_id` (`s_id`)
) ENGINE=InnoDB |

| s | CREATE TABLE `s` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`p_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `p_id` (`p_id`)
) ENGINE=InnoDB |

| p | CREATE TABLE `p` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB |

现在,以前,我们有一个 GROUP BY d.id 来获取唯一性。现在这里的数据很大,所以我们不能再现实地这样做了。 SELECT DISTINCT d.id 甚至更慢。

有什么想法吗?我想出的每件事都会在其他地方造成问题。

最佳答案

将“JOIN m ON d.id = m.d_id”更改为“LEFT JOIN m ON d.id = m.d_id”是否可以实现您在此处寻找的内容?

我不确定我是否清楚地理解您的目标,但是“表 m 包含每个 d 的许多行”立即让我想知道您是否应该使用其他类型的连接来完成您的目标。

关于mysql - mysql一对多连接中的唯一记录没有DISTINCT或GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22053160/

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