2015-04-01 80 views
0

獲取值的查詢我試圖運行以下MS Access查詢使用從第一個選擇到第二個值: (這個問題來自這裏Using results from a query within the same query,但我改變了它大大,我覺得它是權證一個新的問題)加入從其他

SELECT 
A.field1, 
A.field2, 
A.field3, 
FROM TheTable AS A 
Where A.Id = 3; 
?Join/UNION? 
SELECT 
B.field4, 
B.field5 
FROM TheTable AS B 
Where B.Id = field1 

最後,我想在那裏是5列作爲輸出基於這兩個查詢,但我該怎麼辦的加入/工會正確的呢?請注意,TheTable在兩個查詢中都是相同的,但我在每個部分中使用的方式都不相同...

我不會在第2行(和空值)的下一行挖掘3行元素的第一行。只要我能在一個查詢中完成它。

所以輸出將如下所示:

A.field1, A.field2, A.field3, B.field4, B.field5 
1, 2, 3, 4, 5 

+0

請編輯您的問題,並提供樣本數據和期望的結果。 – 2015-04-01 21:00:18

回答

0

我想你想要的是

SELECT 
A.field1, 
A.field2, 
A.field3, 
B.field4, 
B.field5 
FROM TheTable A inner join TheTable AS B on 
B.Id = field1 
Where A.Id = 3 
1

聯接是否有相同數量的行只會工作從每個查詢生成或總是生成更少的行。

除此之外,您可以從一個查詢或兩個查詢的聯合中獲取此輸出。

工會實際上是更簡單,更易於維護:

SELECT A.field1, A.field2, A.field3, null Field4, null Field5 
FROM TheTable AS A 
Where A.Id = 3 
union all 
SELECT null, null, null, B.field4, B.field5 
FROM TheTable AS B 
Where B.Id = field1; 

單查詢的效率更高,但它也稍微複雜些:

SELECT case id when 3 then field1 else null end as Field1, 
     case id when 3 then field2 else null end as Field2, 
     case id when 3 then field3 else null end as Field3, 
     case id when 3 then null else field4 end as Field4, 
     case id when 3 then null else field5 end as Field5 
FROM TheTable AS A 
Where Id = 3 
    or Id = Field1; 

但是,你要的主要問題回答可能不是效率而非可維護性。你必須考慮的一件事就是Field1可以等於3.如果情況應該如此,那麼同一行將在「A」查詢中生成一個元組,並在聯合中生成「B」查詢。但是,按照書面的說法,它只會生成一個帶有Field1,Field2和Field3值的元組,並在單個查詢中的Field4和Field5字段中生成NULL。

因此,如果這應該是可能的(Field1 = ID),您必須選擇哪個查詢生成您的需求的最佳結果。如果這種情況不可行,請選擇其中一種。