SQL - 加入数据

时间:2012-01-14 15:13:11

标签: mysql sql join

在需要3个表格的数据时,是否可以得到1个结果。

第一张表:我需要抓住所有字段(主键找到1行)

第二张表:我需要获取'用户名'字段(通过'master_id'连接到第一个表)

第三个表:我需要使用关联的master_id键获取最新添加的行(表有'date','master_id','previous_name')。

3 个答案:

答案 0 :(得分:5)

select top 1 first.*, second.username, third.*
from first 
inner join second on first.id = second.master_id
inner join third on first.id = third.master_id
order by
third.date desc

一如既往,有很多方法可以为猫提供皮肤,我不确定它是否作为子查询方法进行了优化,但它应该可以正常工作。

答案 1 :(得分:1)

您可以将三张桌子连在一起。然后,您可以使用“过滤器”连接来仅保留最新的Table3行:

select  *
from    Table1 t1
join    Table2 t2
on      t2.master_id = t1.master_id
join    Table3 t3
on      t3.master_id = t1.master_id
join    (
        select  master_id
        ,       max(date) as max_date
        from    Table3
        group by
                master_id
        ) as filter
on      t3.master_id = filter.master_id
        and t3.date = filter.max_date

答案 2 :(得分:1)

您需要第三个表的相关子查询。

SELECT t1.*, username, date, previous_name
FROM FirstTable t1
INNER JOIN SecondTable t2 ON t1.master_id=t2.master_id
INNER JOIN 
(SELECT master_id, date, previous_name
 FROM ThirdTable AS t3_1
 WHERE date = (
      SELECT MAX(date) 
      FROM ThirdTable AS t3_2 
      WHERE t3_2.master_id=t3_1.master_id)) q1 ON q1.master_id=t1.master_id;

注意:未经测试。