【问题标题】:MySQL : Cannot remove duplicate combination in cross joinMySQL:无法删除交叉连接中的重复组合
【发布时间】:2020-11-13 15:13:10
【问题描述】:

我正在尝试从我的交叉连接选择语句中删除重复的组合,我遵循了this example,但重复的组合仍然存在,它甚至混合了credit_idloan_id。我该怎么做? 我的代码

SELECT DISTINCT 
CASE WHEN `credit`.`id`<=`loan`.`id` THEN `credit`.`id` ELSE `loan`.`id` END AS `credit_id`,
CASE WHEN `credit`.`id`<=`loan`.`id` THEN `loan`.`id` ELSE `credit`.`id` END AS `loan_id`
FROM
(SELECT `id`,`city` as `City with credit`,`fishing_segment` FROM `data` 
WHERE `city` LIKE '%Credit') AS `credit`
CROSS JOIN
(SELECT `id`,`city` as `City with loan`,`fishing_segment` FROM `data` 
WHERE `city` LIKE 'Loan%') AS `loan`;

结果

+-----------+---------+
| credit_id | loan_id |
+-----------+---------+
|         1 |       2 |
|         2 |       3 |
|         2 |       5 |
|         1 |       4 |
|         3 |       4 |
|         4 |       5 |
|         1 |       6 |
|         3 |       6 |
|         5 |       6 |
+-----------+---------+

我想要的结果

+-----------+---------+
| credit_id | loan_id |
+-----------+---------+
|         1 |       2 |
|         3 |       4 |
|         5 |       6 |
+-----------+---------+

这是FIDDLE

【问题讨论】:

  • 我正在尝试从我的交叉连接选择语句中删除重复的组合显示的输出中没有重复项,每一行都是唯一的。
  • 我想要的结果 为什么要存储 (1,2) 并删除 (1,4) 和 (1,6)?定义标准...也许您需要简单地添加GROUP BY credit_id 并将loan_id 表达式包装到MIN() 函数中?
  • 执行GROUP BY credit_id 并将loan_id 表达式包装成MIN()。使其显示credit id 1,1,1 和loan_id 2,4,6

标签: mysql


【解决方案1】:
SELECT TRIM(REPLACE(REPLACE(city, 'Credit', ''), 'Loan', '')) city,
       GROUP_CONCAT(CASE WHEN LOCATE('Credit', city) THEN id END) credit_ids,
       SUM(CASE WHEN LOCATE('Credit', city) THEN fishing_segment END) credit_fishing_segment,
       GROUP_CONCAT(CASE WHEN LOCATE('Loan', city) THEN id END) loan_ids,
       SUM(CASE WHEN LOCATE('Loan', city) THEN fishing_segment END) loan_fishing_segment
FROM data
GROUP BY 1;

fiddle

【讨论】:

  • 非常感谢@Akina。这对我很有帮助
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 2011-07-19
  • 2021-03-14
  • 1970-01-01
  • 2015-10-18
  • 2012-10-03
  • 2015-06-02
  • 1970-01-01
相关资源
最近更新 更多