不包括空行的右联接



希望有人能帮我。我正在将Alteryx工作流重写为SQL,在工作流中有一个左、内和右连接。当我编写sql来复制左联接和内联接时,我会得到与Alteryx工作流相同数量的记录,但右联接有问题。我应该得到25条记录,但我的工作流程一直给我17条(与左侧和内部联接的结果相同(。表1中只有引号编号10和11(它们填充了17行数据(,但表2有所有10个引号,所以通过右联接,我希望看到我的结果显示表1中的2个引号,它将填充类似于左联接和内联接的17行,但也用其他8行缺失的引号填充其余结果,总共给我25行。为什么没有发生这种事?为什么右边的联接没有给我表1中没有的引号?以下是查询:

SELECT
table2."Quote No",
table1."Quote No",
table1.* 
FROM table1
right JOIN
(
SELECT distinct
"Quote No"
FROM Table2
GROUP BY 1
)table2 ON table2."Quote No"=table1."Quote No"
WHERE 1=1
AND table1."Quote No" IN  ('10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20')

当您使用外部联接(如RIGHT join(,并且'Other'表(联接另一侧的表:Table1(没有匹配的行时,Table2行仍将返回,但Table1列将显示为NULL。如果您添加WHERE条件,例如您在这些列上添加的条件(AND table1.Quote;Quote No;IN('10…(table1.quot;报价编号"被视为NULL,并且它与列表中的任何内容都不匹配并被消除。尝试将WHERE条件移动到JOIN子句:

SELECT table2."Quote No", table1."Quote No", table1.* 
FROM table1 
right JOIN ( SELECT distinct "Quote No" FROM Table2 GROUP BY 1 )table2 
ON table2."Quote No"=table1."Quote No" 
AND table1."Quote No" IN ('10','11','12','13','14','15','16','17','18','19','20')

通过切换我的表来修复它,因此将表2作为我的基表,并将其左联接到表1,再加上联接中包含where子句的反馈,帮助我偶然发现了我正在寻找的25行,谢谢!!

最新更新