【问题标题】:Hide column from a left join select从左连接选择中隐藏列
【发布时间】:2017-08-10 14:18:45
【问题描述】:

在这方面有点挣扎,希望我能在这里得到一些答案。我正在尝试从 SQL 命令中删除出现在我的结果中的列。我不希望“player_id”出现两次(第二次显示来自下面的 join 语句)。尝试操作 join 语句,但每次我这样做时,它都无法获取数据。

select * from org_members
left join (select player_id, LISTAGG(ship_name, ', ') WITHIN GROUP 
(order by ship_name) as Ships
from member_ships 
group by player_id) ships
on org_members.player_id=ships.player_id 

仅供参考,通过 APEX 在 oracle 11gXE 上运行。

编辑:这是 hte 输出

【问题讨论】:

  • 您始终可以指定要显示的列。在您的情况下,如果是联合表。您可以通过将表名(或别名)指定为前缀来从任何表中选择列。像这样:org_members.player_id。
  • 请勿发布图片。而是将其发布为纯文本
  • 请阅读meta.stackoverflow.com/questions/285551/… 和接受的答案
  • 我显示的是输出,而不是代码本身。相同的代码就在上面并进行了适当的标记。我无法在此处复制粘贴表格

标签: sql join oracle11g


【解决方案1】:

除非您显示当前输出,否则不确定,但您应该像下面这样说。除非您选择该列,否则它不应出现两次。

select org_members.* from org_members

根据您的评论,在这种情况下,您应该手动指定列名,而不是使用 * 之类的

select org_members.player_id,.....,ships.name,....

【讨论】:

  • 添加输出(隐藏数据本身)
  • 您的代码实际上只会显示原始表格 - 连接根本不起作用。如果我输入您的代码,最后 2 列(连接部分)会丢失
  • @PaulGerardGleeson,是的,猜到了,我发布的答案应该可以解决问题
  • @PaulGerardGleeson,如果有帮助,请参阅答案中的编辑。
  • 我需要第一个表中的所有列。它来自左连接 htat 的列 player_id 需要隐藏
【解决方案2】:

如果您不想要player_id,那么最安全的做法是列出您想要的列。

但是,如果你想使用*,有一个简写:

select *
from org_members om left join
     (select player_id,
             LISTAGG(ship_name, ', ') WITHIN GROUP (order by ship_name) as Ships
      from member_ships 
      group by player_id
    ) ships
    using (player_id);

using 子句完全符合您的要求。

不过,在你的情况下,我仍然会明确说明这些列:

select om.*, ships.ships
from org_members om left join
     (select player_id,
             LISTAGG(ship_name, ', ') WITHIN GROUP (order by ship_name) as Ships
      from member_ships 
      group by player_id
    ) ships
    using (player_id);

【讨论】:

  • 为延迟道歉@gordon 这有效。不知何故,我在 APEX 中的查询生成器无法识别它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2010-11-20
  • 2013-10-11
  • 1970-01-01
  • 2013-07-13
相关资源
最近更新 更多