【发布时间】:2016-03-20 23:20:13
【问题描述】:
我必须使用left join 从 3 个表中获取所有数据。无论是否使用left join,我都这样做了。但是我的老师问了另一种只使用inner join 的解决方案。我只是找不到解决方案,请提供一些建议。以下是表格:
结果应该是这样的:
用left join解决方案:
SELECT O.*,C.CUST_CODE,C.CUST_NAME,P.PART_CODE,P.PART_NAME
FROM ORDERS O
LEFT OUTER JOIN PART P ON P.PART_ID = O.PART_ID
LEFT OUTER JOIN CUSTOMER C ON C.CUST_ID = O.CUST_ID
没有left join解决方案:
SELECT O.*,
(SELECT C.CUST_CODE FROM CUSTOMER C WHERE C.CUST_ID=O.CUST_ID) AS CUST_CODE,
(SELECT C.CUST_NAME FROM CUSTOMER C WHERE C.CUST_ID=O.CUST_ID) AS CUST_NAME,
(SELECT P.PART_CODE FROM PART P WHERE P.PART_ID = O.PART_ID ) AS PART_CODE,
(SELECT P.PART_NAME FROM PART P WHERE P.PART_ID = O.PART_ID ) AS PART_NAME
FROM ORDERS O
【问题讨论】:
-
无法使用
inner join完成该结果。这是因为您的某些订单包含客户或零件的 NULL 值。你 100% 确定你的老师说 inner join 吗? -
这个链接应该可以帮助你解决你的问题stackoverflow.com/questions/7510481/…
-
@SQLGeorge 有几种方法可以在没有
LEFT JOIN的情况下执行此操作。这就是我相信 OP 所要求的。 -
@TimBiegeleisen 是的,但他专门要求内部连接。
-
@SQLGeorge 是的,他希望我们只使用内部联接
标签: sql sql-server join left-join inner-join