2013-03-13 79 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