mysql - 多对多关系mysql中的重复行

标签 mysql sql

在这种情况下我有多对多的关系问题

表:customer_master

+---------+-----------+
| cust_id | cust_code |
+---------+-----------+
|       1 | S00333    |
+---------+-----------+

表:客户_供应链

+----------------+-----------+-------------------+
| supply_cust_id | cust_code | supplye_cust_code |
+----------------+-----------+-------------------+
|              1 | S00333    | HI00001           |
|              2 | S00333    | MA00010           |
+----------------+-----------+-------------------+

表:客户_车辆

+----------------+-----------+------------------+
| cust_vehicl_id | cust_code | vehicle_model_id |
+----------------+-----------+------------------+
|              1 | S00333    |              161 |
|              2 | S00333    |              162 |
+----------------+-----------+------------------+

Mysql 查询是:

SELECT
  cv.vehicle_model_id,
  csc.supply_cust_code AS suppl_code
FROM customer_master cm
  LEFT JOIN customer_supply_chain csc
    ON csc.cust_code = cm.cust_code
  LEFT JOIN customer_vehicle cv
    ON cv.cust_code = cm.cust_code
WHERE cm.cust_code = 'S00333'

查询结果

+------------------+------------------+
| vehicle_model_id | supply_cust_code |
+------------------+------------------+
|              161 | HI00001          |
|              162 | HI00001          |
|              161 | MA00010          |
|              162 | MA00010          | 
+------------------+------------------+

我们的愿望输出是

+------------------+------------------+
| vehicle_model_id | supply_cust_code |
+------------------+------------------+
|              161 | HI00001          |
|              162 | MA00010          |
+------------------+------------------+

问题是每一行都由 supply_cust_codevehicle_model_id 重复,

我们尝试使用 distinct 和 group by 以及其他修复方法(在堆栈溢出中显示)但不起作用,

如果我们使用 group by 所以我们无法获取所有数据并且我们不想使用 group_concat ,我们无法纠正问题, 我们只是尝试获取所有行但不重复

最佳答案

我不知道你为什么会得到这些重复项,因为示例数据不支持它,但你可以尝试使用 SELECT DISTINCT:

SELECT DISTINCT cv.vehicle_model_id,
                csc.supply_cust_code AS suppl_code
FROM ...

或者您可以尝试对模型 ID 进行分组并提供客户代码:

SELECT cv.vehicle_model_id,
       csc.supply_cust_code AS suppl_code
FROM customer_master cm
LEFT JOIN customer_supply_chain csc
    ON csc.cust_code = cm.cust_code
LEFT JOIN customer_vehicle cv
    ON cv.cust_code = cm.cust_code
WHERE cm.cust_code = 'S00333'
GROUP BY cv.vehicle_model_id,
         csc.supply_cust_code

关于mysql - 多对多关系mysql中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39529095/

相关文章:

mysql - 如何根据结果集中已存在的行查询其他行

php - 如何在更改其他数据时保持日期不变?

php - UTF-8贯穿始终

php - SQL:获取属于 SUM 中不同值的正确 ID

mysql - 如何找到一个确切的单词而不是单词的一部分?

sql - 如何选择最后3行但最后一行

mysql - 使用专有的 ODBC 驱动程序将 MySQL 连接到外部数据源

php - 高效发送/接收 MySQL 行?

mysql - 如何处理 MySQL 排名列中的平局

java - Spring 启动-com.mysql.jdbc.spring启动异常.jdbc4.MySQLSyntaxErrorException : Unknown column 'customer0_.email' in 'field list'