【发布时间】:2014-01-08 05:00:06
【问题描述】:
您好,我有 3 个表的内部联接
SELECT ADDRESS.NAME, ADDRESS.SURNAME, ADDRESS.PLACE,ADDRESS.TOTAL_COST_YEAR, ADDRESS.AREA, ISNULL(SUM(RENT.TO_PAY), 0) AS SumToPay, ISNULL(SUM(ORDER.AMOUNT), 0) AS SumPaid FROM ORDER
INNER JOIN ADDRESS
ON ADDRESS.IDadresa=ORDER.IDadresa
INNER JOIN RENT
on RENT.IDadresa = ORDER.IDadresa
GROUP BY ADDRESS.NAME, ADDRESS.SURNAME,ADDRESS.PLACE,ADDRESS.TOTAL_COST_YEAR,ADDRESS.AREA
它运行良好,但有时在表 ADDRESS 中的 IDadresa 下找到的值不包含其他表中的任何记录,但我仍然需要显示来自 ADDRESSES 的行。
我认为这是因为在 RENT 和 ORDER 列中没有该 ID 的任何记录。有人可以帮我改进这段代码吗?
感谢您的宝贵时间。
【问题讨论】:
-
使用
left outer join而不是inner join进行两个连接。您希望将所有内容都保留在address表中,因此将其设为序列中的第一个表并进行所有连接left outer join。 -
@GordonLinoff 谢谢你的评论,我应该在
JOINS中都使用LEFT OUTER JOIN吗?当我这样做时,我会得到相同的结果。 -
订单和地址之间右连接,地址和租金之间左连接
-
@wxyz 谢谢!效果很好,请将其作为答案发布,以便我接受。