2013-03-13 58 views
0

我正在處理一個數據庫,該數據庫爲每個有4個公司的公司(總共8個數據庫用於此查詢)擁有2個表,並且出於我的控制之外的原因,不能改變。這也是一個sqlite數據庫。對具有匹配列和合並列的聯合表執行SQL/sqlite查詢

我的應用程序目前必須做8次往返才能獲取所有數據。我想將其整合到一個表視圖查詢中,但我無法弄清楚如何以一種可以使其工作的方式組合數據。這是表格的一個例子。

表1(A型)

name zone 
ABCD ABC1 
DBAA CBA1 

表2(A型)

name zone 
ABCD 1234 
DBAA 4321 

表1(B型)

zone weight rate 
ABC1  1  0.50 
CBA1  2  0.88 

表2(B型)

zone weight rate 
1234  1  0.52 
4321  2  0.80 

最後,我想以這個樣子:

name weight Table 1 rate Table 2 rate 
CABA  1   0.52   0.50 
AEAS  2   0.80   0.88 

我想這對我的SQL語句:

SELECT 1A.name, 1B.weight, 1B.rate as A from 1A, 1B WHERE 1A.zone = 1B.zone 
UNION ALL 
SELECT 2A.name, 2B.weight, 2B.rate as B from 2A, 2B WHERE 2A.zone = 2B.zone 

我也嘗試了幾個閱讀工會後加入語句必須有匹配的列數但我似乎無法擊中正確的查詢。任何想法我做錯了什麼,或者我怎麼能實現這個查詢?

任何幫助,非常感謝!

已更新,這裏小提琴例如:http://sqlfiddle.com/#!5/37c19/3/0

+0

你的SQL似乎是正確的;你遇到什麼錯誤? – 2013-03-13 03:12:28

+0

我沒有得到表1的速率和表2的速率作爲單獨的列,而是我運行查詢時只獲得表1速率。如果我自己運行這兩個查詢,我會得到適當的數據。 – 2013-03-13 03:19:57

+0

CABA和AEAS的名字從哪裏來? – 2013-03-13 03:22:35

回答

1

這裏是會產生類似的例子東西查詢:

SELECT 
    ZonesOne.name 
    , RatesOne.weight 
    , RatesOne.rate as Table1Rate 
    , RatesTwo.Rate AS Table2Rate 

FROM ZonesOne, RatesOne, RatesTwo 

WHERE 
    RatesOne.zone = ZonesOne.zone 
    AND RatesOne.Weight = RatesTwo.weight 

UNION ALL 

SELECT 
    ZonesTwo.name 
    , RatesOne.weight 
    , RatesOne.rate as Table1Rate 
    , RatesTwo.Rate AS Table2Rate 

FROM ZonesTwo, RatesOne, RatesTwo  

WHERE 
    RatesOne.zone = ZonesTwo.zone 
    AND RatesOne.Weight = RatesTwo.weight 

然而,你Table 1 RateTable 2 Rate似乎周圍的切換。另外,來自ZonesTwo的數據有兩個「DBAA」條目。

+0

啊,是的,我的數據上有一個錯誤的小提琴,但這個查詢做我想找的!如果有其他人遇到這個問題,我已經用適當的數據更新了原始問題。萬分感謝! – 2013-03-20 20:39:41