SQL SELECT在子表中没有行的外键行

时间:2012-04-24 18:13:28

标签: sql select inner-join

我需要以下代码来显示AUTHOR表中的行,即使它们没有从ALLOCATION表中的任何行调用。目前,代码显示具有适当外键数据的所有ALLOCATION行。我需要它,以便AUTHOR表中的所有行都显示出来,即使它们没有相应的ALLOCATION行。

SELECT authid,sname,fname,B.bid
FROM ALLOCATION A
INNER JOIN BOOK B
ON A.bid = B.bid
INNER JOIN AUTHOR U
ON A.authid = U.authid
ORDER BY authid;

也就是说,AUTHOR表中的某些行是ALLOCATION表中0行的外键。我需要它们在SELECT中显示出来。 authid,sname和fname是AUTHOR表的列。

2 个答案:

答案 0 :(得分:3)

您想使用名为outer join的内容。

取代INNER,而不是LEFT OUTERRIGHT OUTER,取决于方向。

这样做的是,如果另一个表中没有相应的记录,则列将填充为空。

答案 1 :(得分:3)

select authid,
    sname,
    fname,
    B.bid
from AUTHOR U
left outer join ALLOCATION A on A.authid = U.authid
left outer join BOOK B on A.bid = B.bid
order by authid