【问题标题】:selecting multiple times from two tables to get two different result从两个表中选择多次以获得两个不同的结果
【发布时间】:2013-09-12 23:27:57
【问题描述】:

我正在使用 apex 应用程序构建来创建报告。

表格

员工

id    name

201   john
302   sarah
787   bob

产品

product_editor_id     product_name

201                   car
307                   shoe
728                   airbag

您可以在员工表中看到我有员工详细信息,在产品中我有员工 ID 以显示创建它的员工。

在我的报告中,我从员工表中选择了所有内容,但您看到我在哪里有员工 id 我不想显示 id,而是显示他们的名字

我已经为此重写了一个查询。我问这个问题的原因是在上一个查询中我有这样的事情

select * from staff Inner join
company_car ON
staff.staff_car_id=company_car.vehicle_id_staffid

如果该查询没有意义。基本上我这样做是为了只显示拥有公司汽车的员工,并且 vehicle_id_staffid 与员工 ID 相同。

无论如何,对于该查询,我需要向其中添加我的新查询,即

select distinct name from staff
left join product on 
staff.id=product.product_editor_id

我试过了

select * from staff Inner join
company_car ON
staff.staff_car_id=company_car.vehicle_id_staffid
UNION
select distinct name from staff
left join product on 
staff.id=product.product_editor_id

但是apex说ORA-01789: query block has incorrect number of result columns

我希望它的结果有所不同。第一个查询应该对第二个查询有任何问题,因为他们只是在做自己的事情。

【问题讨论】:

  • 这两个查询实际上是相关的,还是它们有不同的用途?如果不同,那么您应该简单地将两者分开,而不是引入 UNION。您收到错误的原因是第一个查询返回的列与第二个查询不同 - 这可以轻松修复,但结果集可能没有多大意义。
  • @nickebbitt 这是一个好主意,但是当您继续使用 Edit Region 时,事情就在 apex 应用程序构建器中,您只有一个 source 来编写查询和源代码。该报告将呈现您从查询中选择的任何内容。那是问题。如果不是这样,我会按照你刚才说的那样做
  • @nickebbitt 是正确的。你正在尝试做一些不可能的事情。当您合并查询时,它们需要相同的列集,而不是查询 1 中的 4 和查询 2 中的 3。目标是什么:显示拥有公司汽车和/或产品编辑的员工的所有员工信息?
  • @Tom i TRIED union 因为我试图显示员工姓名而不是他们的id。因此,通过使用联合,我想如果它检查人员表并且idproduct 表中的匹配,那么它将返回name。希望这是有道理的
  • @uykenpachi 我无意冒犯,但这是一些基本的 sql 知识。我们当然可以提供答案,但我强烈建议您拿起一本书或课程或某种好的阅读材料来了解更多关于这方面的信息。编写一个得到你想要的查询的第一步是简单地考虑:我有什么,我需要什么,我有什么可以支配的。同样,在问您的问题时,您应该记住这一点,因为您的问题确实不清楚!您出于某种神秘的原因尝试执行联合只会进一步混淆问题。同样,没有冒犯的意思。

标签: sql oracle-apex


【解决方案1】:

可能最简单的方法是创建包含 staff_id 的原始报告。所以 将新报告创建为新页面或页面上的区域。 - 类似:

Select * from company_car

因此,您将获得将 staff_id 作为列之一的报告。然后您编辑页面属性并转到报告。

选择报告属性,然后从报告中的列列表中选择staff_id 列编辑(左侧的铅笔图标)。

转到显示为并选择'Display as Text based on LOV dont save state'

将出现值列表。转到值列表部分

然后输入:

select id r, name d from staff;

select id r, name||' '||surname d from staff;

在这里,您需要将 staff_id 与姓名和他们的姓氏联系起来,这将显示在报告上,而不是无意义的 id。或者,您可以创建静态 LOV 并使用它来填充此列,或者您可以尝试构建 JOIN 语句。

【讨论】:

  • 这是一份报告/表格。所以不幸的是我没有选择编辑那个特别的字段/列
  • 我很困惑。您是要从数据库中获取数据还是插入数据?通常页面上的元素是表单或报表。请记住,您每页有多个表格或报告...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多