【问题标题】:SQL - Union all / Inner join (with where clauses)SQL - 联合所有/内连接(带有 where 子句)
【发布时间】:2018-07-24 20:24:03
【问题描述】:

我正在尝试将许多旧的 AS400 查询移植到 SQL,因为我正在开发一个 GUI,用于报告和更新来自 AS/400 中的库的记录。

这样,我遇到了一个包含很多步骤的查询,并且表的连接让我有点吃惊。

以下是我想要从 AS400 上三个物理文件中的两个文件中检索数据的查询。

select substr(clntpm,1,2) as clntwf, substr(pal#pm,1,10) as pal#wf, 
       substr(clsspm,1,2) as clsswf, clsqpm * 1 as clsqwf
from warpall
where locnpm <> 'ASSEMBLED PALLET'
  and commpm <> 'ASSEMBLED PALLET'
  and clsqpm <> 0

union all

select substr(clntpq,1,2) as clntwf, substr(pal#pq,1,10) as pal#wf, 
       substr(clsspq,1,2) as clsswf, clsqpq * 1 as clsqwf
from warpalq
where clsqpq <> 0

现在我想添加第三个表...据我了解,我想对上述联合的结果进行内部联接。

select * from (
<old query>
) t9
inner join t3 on <field> where t3.field = t9.field

这是我尝试过的,但显然我的语法错误,因为我收到关于 where 子句意外的错误。

谁能给点启示?

【问题讨论】:

  • 您使用的是哪个 dbms? DB2?
  • union 语句中没有名为field 的列。

标签: sql join union


【解决方案1】:

试试这个

select 
  * from (<old query>) as t9
inner join 
  t3 
on 
  t3.field = t9.field 

【讨论】:

  • 似乎工作正常,只是与 as400 输出进行了一些比较谢谢
  • 不客气。请接受我的正确答案并投票;)
  • 是的,您的回复确实解决了我遇到的问题。自然地,我遇到了另一个,这让我认为我接近它是错误的(我从来没有在这个之前写过子选择)。我不能再加入 warpall,因为它在嵌套的 select 语句中别名为 t9。我不能将它添加到 t9,因为它不在 warpalq 中,所以联合都会失败。我想我需要全部删除联合并编写一个三阶段选择?
  • @PureBluff 。 . .如果这回答了你的问题,你应该回答它。如果您还有其他问题,请将其作为问题提出,而不是在评论中提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2012-09-04
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多