【发布时间】:2022-07-01 00:38:54
【问题描述】:
我有 3 个表:Car、Client 和 Car_client,后者是 car 和 client 之间的联结表,因为正如我所说 Car_Client 是一个联结表,这意味着 car 和 client 之间的关系是多对多的。表的结构如下:
_____________________ ___________________ ______________________
| Car | | Client | | Car_Client |
|___________________| |_________________| |____________________|
| license_plate (PK)| | Name | | license_plate(fk) |
| Model | | Surname | | Id_Code(fk) |
|___________________| | Id_Code (PK) | |____________________|
| Phone |
|_________________|
现在,我要实现的目标是允许用户按名称研究客户。搜索名称时,我想显示有关他拥有的汽车的所有信息以及他的个人信息。所以基本上就像 select * from Car, Client 但只是为了一个特定的名称。为了实现这一点,我尝试了不同的方法,效果最好的一种,虽然不完美的是这个:
SELECT * FROM
Car_Client car_cli
INNER JOIN Car ON ( car_cli.license_plate = car.license_plate)
INNER JOIN Client ON ( car_cli.Id_Code = Client.Id_Code)
WHERE
Car_Client.Id_Code in (SELECT Id_Code FROM Client WHERE Name = 'emanuele');
这个解决方案的问题是我有两个额外的 license_plate 和 Id_Code 列
【问题讨论】:
-
那么select后不要使用
*,而是单独指定所有字段。 (最好只指定您实际需要的字段。) -
不要使用
SELECT *。指定您想要的列。不,没有* except car_cli.Id_Code