微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以一对多关系返回多行

如何解决如何以一对多关系返回多行

我必须在数据库中以客户和车辆的名字来表,客户和车辆都以一对多的关系连接在一起。客户有两个记录,其中customer_id = 1和2,车辆有两个记录,其中customer_id = 1,并且映射了vehicle_id = 1和2, customer_id = 2映射到vehicle_id = 3 客户表

╦══════════════╦════════════════════╗
║ customer_id  ║       name         ║
╬══════════════╬════════════════════╣
║           1  ║      pranav        ║
║           2  ║      akshay        ║
╩══════════════╩════════════════════╝

车辆表

╦══════════════╦════════════════════╗═════════════╗
║  vehicle_id  ║    vehicle_name    ║customer_id  ║      | 
╬══════════════╬════════════════════╣═════════════║      
║           1  ║      activa        ║    1        ║
║           2  ║      access        ║    1        ║
║           3  ║      bullet        ║    2        ║
╩══════════════╩════════════════════╝═════════════╝

我正在得到这个

╦══════════════╦════════════════════╗═════════════╗
║  vehicle_id  ║    vehicle_name    ║    name     ║
╬══════════════╬════════════════════╣═════════════║      
║           1  ║      activa        ║   pranav    ║
║           3  ║      bullet        ║   akshay    ║
╩══════════════╩════════════════════╝═════════════╝

预期产量----

╦══════════════╦════════════════════╗═════════════╗
║  vehicle_id  ║    vehicle_name    ║    name     ║
╬══════════════╬════════════════════╣═════════════║      
║           1  ║      activa        ║   pranav    ║
║           2  ║      access        ║   pranav    ║
║           3  ║      bullet        ║   akshay    ║
╩══════════════╩════════════════════╝═════════════╝

我正在使用此查询

SELECT vehicle_id,vehicle_name,customers.name 
FROM customers,vehicles 
WHERE customers.customer_id=vehicles.vehicle_id

解决方法

从不FROM子句中使用逗号。 始终使用正确的,明确的,标准,可读的JOIN语法。

您的问题是您的JOIN条件错误。您想要:

select v.vehicle_id,v.vehicle_name,c.name
from customers c join 
     vehicles v
     on c.customer_id = v.customer_id;

注意:

    如果您有多个表引用,请在查询中
  • 限定所有所有列名。
  • 使用表别名,以便查询更易于编写和阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。