2012-01-05 52 views
2

我完全错了吗? 我想做一个左外连接到2个表生成的查询,但我不断收到错误。我需要不同的方法吗?左外连接到生成的表?

T1:

ID, Surname,Firstname 

T2:

ID,JobNo,Confirmed 

我有以下查询:

SELECT JobNo AS N, StaffID AS P, Confirmed as C, 
     FirstName AS F,Surname AS S 
FROM gigs_players, Players 
WHERE t1.StaffID=t2.StaffID AND JobNo="2" 
     AND (`Confirmed` IS NULL OR Confirmed ='Y') 
ORDER BY Instrument,Surname 

我想补充:

LEFT OUTER JOIN contacted (ON t1.StaffID=contact.ID AND t2.JobNo=contact.JobNo)" 

我可以对从2个表生成的查询执行left outer join吗?

+0

我不明白你的问题。你能更准确吗? – DonCallisto 2012-01-05 00:29:21

+1

当您执行“t1.StaffID = t2.StaffID”时,暗示t1和t2是查询中的表格,但它们不是。查询中指定的唯一表格是“gigs_players”和“Players”。 – Aaron 2012-01-05 00:34:45

+0

也许你需要做一个子查询的左连接? [链接](http://forums.mysql.com/read.php?24,145214) – 2012-01-05 00:43:15

回答

0

为了在要添加的左外连接中使用t1t2,您需要将它们与第一个表连接起来,因此无法在左外连接中直接引用它们,如下所示:

SELECT JobNo AS N, StaffID AS P, Confirmed as C, 
    FirstName AS F,Surname AS S 
FROM gigs_players, Players 
Inner join t1 on ... 
Inner join t2 on ... 
LEFT OUTER JOIN contacted c 
    on t1.StaffID=c.ID AND t2.JobNo = c.JobNo 
WHERE t1.StaffID=t2.StaffID AND JobNo="2" 
    AND (`Confirmed` IS NULL OR Confirmed ='Y') 
ORDER BY Instrument,Surname 

所以,根据你的表有结构,定义这两个条件与t1t2与其他表联接。

0

以下是子查询左连接的示例。这可能是你正在寻找的。

select 
parts.id, 
min(inv2.id) as nextFIFOitemid 
from test.parts 
left join 
(select 
    inventory.id, 
    coalesce(parts.id, 1) as partid 
    from test.inventory 
    left join test.parts 
    on (parts.id = inventory.partid) 
) inv2 
on (parts.id = inv2.partid) 
group by parts.id;