【问题标题】:SQL/sqlite query to union tables with matching columns and merged columnsSQL/sqlite 查询到具有匹配列和合并列的联合表
【发布时间】:2013-02-28 20:22:16
【问题描述】:

我正在使用一个数据库,每个公司有 2 个表,每个公司有 4 个公司(此查询总共 8 个数据库),并且由于我无法控制的原因无法更改。这也是一个 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

在阅读 unions must have match column counts 之后,我还尝试了几个 join 语句,但我似乎无法找到正确的查询。任何想法我做错了什么或如何通过查询来实现这一点?

非常感谢任何帮助!

在此处更新了 Fiddle 示例:http://sqlfiddle.com/#!5/37c19/3/0

【问题讨论】:

  • 您的 SQL 似乎是正确的;您遇到什么错误?
  • 我没有将表 1 费率和表 2 费率作为单独的列,而是在运行查询时仅获得表 1 费率。如果我自己运行这两个查询,我会得到正确的数据。
  • CABA 和 AEAS 的名称从何而来?
  • 它们只是该表中的文本值。还有另一个表包含所有这些名称的列表,应用程序获取该列表并允许用户选择一个,应用程序使用名称字段查询这 4 个表以获取区域,然后获取费率。我知道这很疯狂,这就是为什么我希望用一个视图来简化它。
  • 向我们展示所有提供结果集中字段的表,而不仅仅是其中的一些。

标签: sql sqlite select sql-view


【解决方案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”条目。

【讨论】:

  • 啊,是的,我在 Fiddle 上的数据有错误,但这个查询符合我的要求!如果其他人遇到这个问题,我已经用适当的数据更新了原始问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-11-19
  • 2017-12-23
  • 2012-12-06
  • 2020-02-18
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多