首页 > 解决方案 > 从表 1 中的 id 返回表 2 中的名称的问题

问题描述

我在这个查询中不断收到错误

我有两张桌子,dbo.littersdbo.dogs

所有狗的信息都在表dbo.dogs中,仅供表中参考。IDdbo.litters

版本 2

Select 
    Puppy.Reg, Puppy.Name, puppy.LitterId, 
    p1.Reg, p1.Name, p2.Reg, p2.Name
From 
    dbo.Dogs Puppy 
Join 
    dbo.litters as p on Puppy.LitterId = p.Id
Join 
    dbo.Dogs as p1 on Puppy.Id = p.FatherId
Join 
    dbo.Dogs as p2 on Puppy.Id = p.MotherId
Where 
    puppy.Reg = 'xxxxx/xxxx' 

查询版本 2 的结果

我想展示小狗的母亲和父亲,这些信息只在dbo.litters表格中。

我是新手,我看不出哪里出错了。

Select 
    d.id, d.Reg, d.Name, d.LitterId, l.FatherId, l.MotherId
From 
    dbo.Dogs D 
inner join 
    dbo.Litters L on d.LitterId = l.Id
where 
    d.Reg = 'XXXXXX/XXXX'`

此查询返回我需要的信息,但不返回父母的姓名。

结果看起来像这样

ID      Reg nr       Name    LitterID     Father ID   MotherID
---------------------------------------------------------------
20590   xxxxx/xxxx   Fido    8525         11942       12007

我在小提琴中制作了一个小版本,所以每个人都可以看到结构:)

小提琴中的数据库

解决方案中的数据库

标签: sql-server

解决方案


您使用别名作为表名,但在连接时未使用。这就是它抛出错误的原因,所以在连接中使用别名:

Select 
    d.id, d.Regnr, d.Name, d.LitterId, l.FatherId, l.MotherId,D1.Name as fathername,
    D2.Name as motherName
From dbo.Litters L

left  join  dbo.Dogs D
     on d.LitterId = l.Id
    left join dbo.Dogs D1 on L.FatherId=D1.ID
    left join dbo.Dogs D2 on L.MotherId=D2.ID
where 
    d.Regnr = 'NO34567/2012'

id      Regnr      Name     LitterId    FatherId    MotherId    fathername  motherName
3   NO34567/2012    Fido     9000          2         1               king       Queen

推荐阅读