[英]unique records in mysql one-to-many join without DISTINCT or GROUP BY
這是基本查詢:
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
可以包含多個s_id
每各S- d_id
。 這是一個超級簡單的示例:
+--------+--------+------+
| 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”是否可以滿足您在這里尋找的需求?
我不確定我是否清楚地理解了您的目標,但是“表d每d包含很多行”立即讓我想知道您是否應該使用其他類型的聯接來實現目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.