【问题标题】:I can't get INNER JOIN to work "ORA 00918"我无法让 INNER JOIN 工作“ORA 00918”
【发布时间】:2017-07-21 11:01:36
【问题描述】:

我有一个查询,它返回我需要的所有正确行,如下所示:

SELECT sequence_no,
MAX(time)
FROM ensapp.shop_order_analysis
WHERE analyzer='SORVI01'
AND part_no in ('PTS228AL','PSS1285')
AND sequence_no in ('6','9','*')
AND SYSDATE-15<time group by sequence_no

但我希望它再返回一列,当我尝试执行 INNER JOIN 时,它会显示“ORA-00918:列不明确定义”。我试图用谷歌搜索,但没有任何意义。这是我尝试过的:

SELECT part_no, sequence_no, time
FROM ensapp.shop_order_analysis a
INNER JOIN(
SELECT sequence_no,
MAX(time)
FROM ensapp.shop_order_analysis
WHERE analyzer='SORVI01'
AND part_no in ('PTS228AL','PSS1285')
AND sequence_no in ('6','9','*')
AND SYSDATE-15<time group by sequence_no) c 
ON a.sequence_no=c.sequence_no

我是 SQL 的初学者。提前致谢

【问题讨论】:

    标签: sql oracle inner-join


    【解决方案1】:

    首先,始终限定您的列名。那么你永远不会有这个问题:

    SELECT a.part_no, a.sequence_no, a.time
    FROM ensapp.shop_order_analysis a INNER JOIN
         (SELECT sequence_no, MAX(time) as maxt
          FROM ensapp.shop_order_analysis
          WHERE analyzer = 'SORVI01' AND
                part_no in ('PTS228AL','PSS1285') AND
                sequence_no in ('6', '9', '*') AND
                SYSDATE-15 < time
          GROUP BY sequence_no
         ) aa
         ON a.sequence_no = aa.sequence_no;
    

    不过,我猜你真的想要:

    SELECT a.*, MAX(a.time) OVER () as maxt
    FROM ensapp.shop_order_analysis s
    WHERE analyzer = 'SORVI01' AND
          part_no in ('PTS228AL','PSS1285') AND
          sequence_no in ('6', '9', '*') AND
          SYSDATE - 15 < time;
    

    【讨论】:

    • 我认为你的“猜测”是这个答案很棒的原因。
    • 感谢您的回答。不幸的是,第一个返回所有具有 sequence_no '6'、'9' 或 '*' 的行,我只想要那些具有 part_no 'PTS228AL' 和 'PSS1285' 的行。你的“猜测”说标识符无效。我想我现在可以做到这一点。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多