gpt4 book ai didi

sql - 左外连接等价

转载 作者:行者123 更新时间:2023-12-04 16:47:34 24 4
gpt4 key购买 nike

我有一个表包含空值。在 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

所以这是我的问题。不使用外部连接怎么办?我尝试了太多东西,包括 where not exists 或 this ;

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)

但我找不到解决方案。如果有解决方案会怎样?

(注意:这是作业。)

我有那种表:

enter image description here

和左外连接给出:

enter image description here

hw 说不使用外连接就可以做到,并得到与左外连接相同的表。但就像我说的那样。我也在使用 MSSQL。

最佳答案

外连接产生内连接之上的超集。确实,来自 Wikipedia : 左外连接返回内连接的所有值加上左表中与右表不匹配的所有值。

因此,要使用内连接对左外连接进行建模,可以在具有相同连接条件的相同表之间使用内连接的 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)

关于sql - 左外连接等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com