我有一个包含空值的表。在 ORDER 表中,PART_ID 部分有 2 个空值,CUSTOMER_ID 部分有 2 个空值。
我有这样的疑问:
SELECT O.ORDER_ID , O.ORDER_DATE , O.CUST_ID, O.QUANTITY ,O.PART_ID ,
C.CUST_NAME, C.CUST_CODE, P.PART_NAME, P.PART_CODE
FROM [ORDER] 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
这是我的问题。在不使用外连接的情况下如何做到这一点?
我尝试了太多的事情,包括不存在的地方或这个;
SELECT *
FROM [ORDER] O ,CUSTOMER C, PART P
WHERE C.CUST_ID = (
SELECT CUST_ID FROM CUSTOMER C WHERE O.CUST_ID = C.CUST_ID
) AND P.PART_ID = (SELECT PART_ID FROM PART P WHERE O.PART_ID = P.PART_ID)
但我找不到解决方案。如果有解决办法会怎样?
(注:这是家庭作业。)
我有这样的桌子:
左外连接给出:
硬件说不使用外连接就可以做到这一点,并获得与左外连接给出的相同的表。但就像我说的那样,我不能。我也在使用MSSQL。
外连接产生内连接的超集。确实,从维基百科: 左外连接返回内连接中的所有值以及左表中与右表不匹配的所有值。
因此,要使用内连接对左外连接进行建模,可以使用UNION内连接的SELECT具有相同连接条件的同一个表与另一个表之间SELECT从第一个表返回右表中没有匹配项的所有行(我将您的情况简化为单个左连接):
SELECT O.ORDER_ID , O.ORDER_DATE , O.CUST_ID, O.QUANTITY ,O.PART_ID ,
P.PART_NAME, P.PART_CODE
FROM [ORDER] O JOIN PART P ON P.PART_ID = O.PART_ID
UNION
SELECT O.ORDER_ID , O.ORDER_DATE , O.CUST_ID, O.QUANTITY ,O.PART_ID ,
NULL, NULL
FROM [ORDER] O
WHERE NOT EXISTS (SELECT 'found' FROM PART P WHERE P.PART_ID = O.PART_ID)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)