[英]Conditional JOIN
我想知道是否有可能在MS Access 2007中完成此操作:
一位客戶給了我幾張桌子,他們問我一些問題。 其中之一必須從表中獲取字段值,具體取決於每個記錄的字段值。 這意味着,根據區域,它必須查看一張桌子,第二張桌子或第三張桌子。
所以,我想知道我是否可以做這樣的事情:
SELECT
table2.some_value
FROM
table1
INNER JOIN table2
ON CASE table1.SOME_VALUE THEN table3.id = table2.some_id ELSE
CASE table1.SOME_VALUE THEN table4.id = table2.some_id ELSE
table5.id = table2.some_id END END
清楚嗎? 如果沒有,請問一下,我會回答您的疑問。
編輯:
我想我還不夠清楚。 我的查詢中有多個聯接,但最后一個聯接中,其ON語句將有所不同,具體取決於數據。 例如:
我在具有“狀態”字段的表中有一條記錄,其中有三種可能性:CA,TX,FL。
如果值為CA,則該JOIN的ON語句應為CA_Standard_table.field = myTable.field。
如果是TX,則該JOIN的ON語句應為TX_Standard_table.field = myTable.field
同樣的邏輯也適用於FL。
我該怎么做?
編輯2:
這是查詢代碼,最后一個JOIN對此很重要。 在ON語句中要使用的表的三種可能性是:
它將決定其中之一,具體取決於選中了以下哪個字段:
詢問
SELECT
Projects.COMPAS_ID,
Projects.[Opportunity Name],
IIf([VolCap]=True,1) AS [Volume Cap],
IIf([DelGuarantee]=True,1) AS [Delivery Guarantee],
Projects.Tech_Level_Name,
Counterparty.CPExpertise,
Counterparty.CPFinStrength,
Geographic_Location.Country_RiskLevel,
Project_Stage_Risk.ProStaRiskLevel,
Counterparty.CPExperience,
Projects.Country_Name,
IIf([EU ETS]=True,1) AS EU,
IIf([CA ETS]=True,1) AS CA,
IIf([NZ ETS]=True,1) AS NZ,
IIf([Australia ETS]=True,1) AS Australia,
IIf([CAProjectType] is not null, CA_Accepted_Projects.CAPTRiskLevel,
IIf([EUSelProjType] is not null, EU_ETS_Standards.EUPTRiskLevel,
IIf([NZSelProjType] is not null, NZ_Accepted_Projects.NZPTRiskLevel))) as [Risk Level],
IIf([CAStandard] is not null, CA_Accepted_Standards.CAStanRiskLevel,
IIf([EUSelStandard] is not null, EU_Accepted_Standards.EUStanRiskLevel,
IIf([NZSelStandard] is not null, NZ_Accepted_Standards.NZStanRiskLevel))) as [Standard Risk]
FROM
Project_Stage_Risk
INNER JOIN (((((((((Counterparty
INNER JOIN Projects
ON Counterparty.CPID = Projects.[Counter Party])
INNER JOIN Geographic_Location
ON Projects.Country_Name = Geographic_Location.Country_Name)
left JOIN CA_Accepted_Projects
ON Projects.CAProjectType = CA_Accepted_Projects.CA_ProjectTypes)
left JOIN NZ_Accepted_Projects
ON Projects.NZSelProjType = NZ_Accepted_Projects.NZ_StandardID)
left JOIN EU_ETS_Standards
ON Projects.EUSelProjType = EU_ETS_Standards.EU_StandardID)
left JOIN CA_Accepted_Standards
ON Projects.CAStandard = CA_Accepted_Standards.ID)
left JOIN NZ_Accepted_Standards
ON Projects.NZSelStandard = NZ_Accepted_Standards.ID)
left JOIN EU_Accepted_Standards
ON Projects.EUSelStandard = EU_Accepted_Standards.ID)
left join Emissions_Trading_Systems
ON Emissions_Trading_Systems.ETS = EU_Accepted_Standards.ETS)
ON Project_Stage_Risk.ProStaID = Projects.[Project Stage];
將兩個集合交叉連接到視圖中,然后將條件放入選擇中。 對此視圖進行2個視圖。 將2個視圖合並在一起。
您可以創建一個UNION查詢,將要有條件地加入的三個表結合在一起,包括一個“ Some_Value”列,該列將包含要加入的項目。 本質上,對於包含在UNION中的每個表,將“ Some_Value”列的值設置為可在where子句中使用以區分事物的值。 然后創建一個整體查詢,該查詢連接(在您的示例中為table2)到聯合查詢,並使用WHERE子句將記錄限制為所需的記錄。 我過去在項目上做過類似的事情,並取得了巨大的成功。
感謝您的回答。 我知道雖然沒有很好的解釋,但是最后,我可以通過編寫子查詢來解決此問題。
將所有五個表連接在一起,並在SELECT子句中使用該CASE表達式從所有表中選擇適當的字段。
SELECT
CASE table1.some_value
WHEN 'a' THEN table2.some_value
WHEN 'b' THEN table3.some_value
WHEN 'c' THEN table4.some_value
WHEN 'd' THEN table5.some_value
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.