簡體   English   中英

mysql一對多聯接中的唯一記錄,沒有DISTINCT或GROUP BY

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM