Mysql 进行SQL查询以使用子查询从两个表返回数据

Mysql 进行SQL查询以使用子查询从两个表返回数据,mysql,sql,Mysql,Sql,我需要从cars表返回汽车id号,从persona表返回车主姓名 每个角色都有一辆车,一个角色可以有多辆车 我创建了SQL,但它返回分配给每个角色的每辆车 SELECT a.id_number, b.owners FROM ( SELECT number as id_number FROM car WHERE fk_ipasnieks IN (SELECT pk_kods FROM personas) ) as a, ( SELECT concat(name

我需要从cars表返回汽车id号,从persona表返回车主姓名

每个角色都有一辆车,一个角色可以有多辆车

我创建了SQL,但它返回分配给每个角色的每辆车

SELECT a.id_number, b.owners 
FROM (
    SELECT number as id_number 
    FROM car 
    WHERE fk_ipasnieks IN (SELECT pk_kods FROM personas)
) as a,
(
    SELECT concat(name, ' ', surname) as owners 
    FROM personas 
    WHERE pk_kods IN (SELECT fk_ipasnieks FROM car)
) as b

子查询需要返回用于关联两个表的列。否则,你会得到一个完整的交叉积,将每个车主与每辆车配对

SELECT a.id_number, b.owners 
FROM (
    SELECT fk_ipasnieks, number as id_number 
    FROM car 
    WHERE fk_ipasnieks IN (SELECT pk_kods FROM personas)
) as a
JOIN (
    SELECT pk_kods, concat(name, ' ', surname) as owners 
    FROM personas 
    WHERE pk_kods IN (SELECT fk_ipasnieks FROM car)
) as b ON a.fk_ipasnieks = b.pk_kods
这通常不会使用子查询来完成。通常的编写方法是直接连接表

SELECT c.number AS id_number, concat(p.name, ' ', p.surname) AS owner
FROM car AS c
JOIN personas as p ON c.fk_ipasnieks = p.pk_kods

使用
连接
?表结构+示例数据+预期输出很好。为什么需要子查询?看起来有一个交叉点join@Strawberry你可能要问他的老师谢谢,这似乎是我需要的东西。还有一个问题,如果我有第三个表需要添加到查询中并从表3中获取有关汽车的数据,我是否需要再使用一个联接?是的,您可以为每个要组合的表使用联接。谢谢。还有一件事,我添加了一个连接,现在这个连接返回多个汽车保险日期,但我只需要得到汽车的最后一个保险日期,而不是汽车的所有保险日期。例如,我有一辆ID为-345的车,它有两个保险日期——2010年和2021年——我需要得到2021年的日期,而不是列表中的两个日期。对不起,我的英语很糟糕,谢谢你的帮助。看到了吗