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

问题描述

我必须在数据库中以客户和车辆的名字来表,客户和车辆都以一对多的关系连接在一起。客户有两个记录,其中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;

注意:

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