所以我有一個 Invoice 表,我在其中創建了以下查詢,我們稱之為“IntInvoice”
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;
接下來我創建了另一個查詢,以使用“IntInvoice”查詢左連接不同的表
SELECT IntInvoice.*
FROM IntInvoice
LEFT JOIN Int_Account
ON IntInvoice.Concatenar=Int_Account.Concatenar
WHERE Int_Account.Concatenar Is Null and IntInvoice.Concatenar is not null;
它按原樣作業得很好,但是是否可以將它們全部放在同一個查詢中以避免在我必須處理資料時創建很多它們?
uj5u.com熱心網友回復:
澄清我的評論,我認為您可以將這兩者組合成一個查詢:
SELECT [U_Concatenar_Invoice Control].*
FROM
[U_Concatenar_Invoice Control]
LEFT JOIN Int_Account
ON [U_Concatenar_Invoice Control].Concatenar=Int_Account.Concatenar
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 and
Int_Account.Concatenar Is Null and
-- this is duplicated from above so should not be necessary:
[U_Concatenar_Invoice Control].Concatenar is not null
在少數情況下這是不可能的(或不容易),但這是一個相對簡單的集成查詢。
例如,如果兩個查詢都進行了聚合/分組,并且您想加入結果。
-- 編輯 2022 年 4 月 20 日 --
根據您的最新評論,其中 Int_Account 實際上如下:
SELECT * FROM U_Concatenar_AccountManagement WHERE
U_Concatenar_AccountManagement.Status_AVD="à traiter";
您可以按如下方式重寫上面的查詢:
SELECT [U_Concatenar_Invoice Control].*
FROM
[U_Concatenar_Invoice Control]
LEFT JOIN [U_Concatenar_AccountManagement] ON
[U_Concatenar_Invoice Control].Concatenar=Int_Account.Concatenar and
[U_Concatenar_AccountManagement].Status_AVD="à traiter"
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 and
[U_Concatenar_AccountManagement].Concatenar Is Null -- fixed
-- [Int_Account.Concatenar] Is Null -- replaced this
我的猜測(這只是一個猜測)是您添加了:
[U_Concatenar_AccountManagement].Status_AVD="à traiter"
以“where”子句代替作為連接的一部分。我不太了解 Access,但在標準 SQL 中,這意味著兩個非常不同的東西:
from x from x
left join y on x.id = y.id left join y on x.id = y.id
and y.z = 'Foo' where y.z = 'Foo'
左邊的保留左連接,并且只在條件為真的記錄上進行左連接。右邊的那個有效地將你的左連接轉換為一個內連接,根據你的查詢的其余部分,它似乎會回傳零個結果(你只想要在 y 中沒有找到匹配項的記錄)。
試一試,看看它是否有效。希望您可以遵循這種模式并消除對這么多子查詢(查詢的查詢)的需要。從長遠來看,這些很難維護,因為您每次都必須跟蹤面包屑。
-- 編輯 2022 年 4 月 21 日 --
我知道你已經把它放在床上,但我必須知道......事實證明,正如你發現的那樣,Access 不支持連接中的 where 條件。我覺得這很瘋狂。但是,您可以通過創建行內子查詢并將您的條件放在那里來實作相同的目標。
這對我有用:
SELECT [U_Concatenar_Invoice Control].*
FROM [U_Concatenar_Invoice Control]
LEFT JOIN (select * from U_Concatenar_AccountManagement where Status_AVD="à traiter") AS X
ON [U_Concatenar_Invoice Control].Concatenar = X.Concatenar
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 AND
X.Concatenar Is Null;
在我看來,這并不比您用來進行兩個查詢的方法更好,一個呼叫另一個。你在簡潔中獲得了什么,你在透明度中失去了什么。擇其一;兩者都不理想。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/461424.html
