You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术问询:能否将带条件的SELECT语句与表直接左连接,无需创建中间查询?

解答你的SQL疑问

第一个问题:带筛选的SELECT能否直接左连接,无需中间查询?

  • 完全可以!你不需要先创建中间查询,直接把带筛选条件的SELECT语句作为子查询,就能和其他表进行左连接操作。子查询是SQL里非常常用的写法,能帮你避免创建一堆临时查询或中间表,让逻辑更紧凑。

第二个问题:合并你的两个查询,实现同一步操作

当然可以合并!咱们直接把第一个IntInvoice查询的逻辑作为子查询嵌入到第二个查询里,替换掉原来的IntInvoice表名就行。合并后的完整SQL如下:

SELECT IntInvoiceSub.* 
FROM (
    SELECT * 
    FROM [U_Concatenar_Invoice Control] 
    WHERE [U_Concatenar_Invoice Control].[Décision prise] IS NULL 
      AND [U_Concatenar_Invoice Control].Concatenar IS NOT NULL 
      AND [U_Concatenar_Invoice Control].N_AVD IS NOT NULL
) AS IntInvoiceSub
LEFT JOIN Int_Account 
    ON IntInvoiceSub.Concatenar = Int_Account.Concatenar 
WHERE Int_Account.Concatenar IS NULL 
  AND IntInvoiceSub.Concatenar IS NOT NULL;

简单解释一下:

  • 我们把原来的IntInvoice查询用括号包起来,起个别名IntInvoiceSub(你也可以换成自己喜欢的名字),它就相当于原来的中间查询,但现在是直接嵌入主查询里的。
  • 后面的左连接和筛选逻辑和你原来的第二个查询完全一致,只是把引用的表名换成了这个子查询的别名。
  • 这样运行起来和你原来的两步查询效果完全一样,但不需要额外创建中间查询,逻辑也更集中。

如果你的SQL方言支持CTE(公共表表达式,比如SQL Server、PostgreSQL、MySQL 8.0+),也可以用更清晰的CTE写法,可读性会更好:

WITH IntInvoiceSub AS (
    SELECT * 
    FROM [U_Concatenar_Invoice Control] 
    WHERE [U_Concatenar_Invoice Control].[Décision prise] IS NULL 
      AND [U_Concatenar_Invoice Control].Concatenar IS NOT NULL 
      AND [U_Concatenar_Invoice Control].N_AVD IS NOT NULL
)
SELECT IntInvoiceSub.* 
FROM IntInvoiceSub
LEFT JOIN Int_Account 
    ON IntInvoiceSub.Concatenar = Int_Account.Concatenar 
WHERE Int_Account.Concatenar IS NULL 
  AND IntInvoiceSub.Concatenar IS NOT NULL;

两种写法都能达到你的需求,选哪个看你自己的习惯和所用数据库的支持情况~

内容的提问来源于stack exchange,提问作者Alex Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:57:42