【问题标题】:SQL join subquerySQL 连接子查询
【发布时间】:2013-09-14 03:14:32
【问题描述】:

我尝试为我的问题寻找答案,但未能找到真正有帮助的答案。 我已经写了一个 sql 代码,但似乎无法找到问题所在。 是否可以在“FROM”部分放置子查询?

SELECT S2.ITEM,
       S1.SHOP_ORDER,
       S1.OPERATION_NO,
       S1.START_DATE,
       S1.QTY_GOODS,
       S1.QTY_ENTERED,
       S1.QTY_MRB
FROM   (SELECT SHOP_ORD_RPT.OPERATION_NO,
               SHOP_ORD_RPT.SHOP_ORDER
        FROM   FLAME.SHOP_ORD_RPT
        WHERE  SHOP_ORD_RPT.OPERATION_NO = 110
                OR SHOP_ORD_RPT.OPERATION_NO = 370) AS S1
       JOIN (SELECT SHOP_ORD.SHOP_ORDER
             FROM   FLAME.SHOP_ORD
             WHERE  SHOP_ORD.ITEM = '3A2375'
                     OR SHOP_ORD.ITEM = '3A2703')AS S2
         ON S1.SHOP_ORDER = S2.SHOP_ORDER; 

我在运行脚本时收到的错误是:

SQL 命令未正确结束

如果有人能提供帮助,我将不胜感激。 非常感谢- 露丝

【问题讨论】:

  • 删除AS S1AS S2 中的“AS”。 SQL Command not properly ended? 的可能重复项
  • 我认为这是甲骨文。这是我最不喜欢的错误信息之一。您在某处有语法错误。在每个子查询中为 shop_order 列放置别名可能值得一试。否则,请重新开始并逐步执行,直到找到错误为止。
  • 这里不需要子查询——只需在主查询本身中加入表即可。
  • @DanBracuk 为什么给这些列加上别名会有帮助?您没有查看可能的重复链接并发现它是同一个问题吗?
  • @MartinSmith,认为某事值得一试并不等于认为它会起作用。就您的链接而言,我在发布我的链接后第一次看到您的评论。我打字很慢。

标签: sql oracle join subquery


【解决方案1】:

尝试在FROMJOIN 子查询之后删除AS keywrod,如下所示

SELECT S2.ITEM, S1.SHOP_ORDER, S1.OPERATION_NO, S1.START_DATE,S1.QTY_GOODS, S1.QTY_ENTERED, S1.QTY_MRB
FROM (
    SELECT SHOP_ORD_RPT.OPERATION_NO, SHOP_ORD_RPT.SHOP_ORDER
    FROM FLAME.SHOP_ORD_RPT
    WHERE SHOP_ORD_RPT.OPERATION_NO =110
    OR SHOP_ORD_RPT.OPERATION_NO =370
    )  S1
JOIN (
    SELECT SHOP_ORD.SHOP_ORDER
    FROM FLAME.SHOP_ORD
    WHERE SHOP_ORD.ITEM ='3A2375'
    OR SHOP_ORD.ITEM ='3A2703'
    )  S2
ON S1.SHOP_ORDER = S2.SHOP_ORDER;

【讨论】:

    【解决方案2】:

    可以在 from 子句中放置子查询。试试这个:

    SELECT S2.ITEM,
           S1.SHOP_ORDER,
           S1.OPERATION_NO,
           S1.START_DATE,
           S1.QTY_GOODS,
           S1.QTY_ENTERED,
           S1.QTY_MRB
    FROM   (SELECT SHOP_ORD_RPT.OPERATION_NO,
                   SHOP_ORD_RPT.SHOP_ORDER
            FROM   FLAME.SHOP_ORD_RPT
            WHERE  SHOP_ORD_RPT.OPERATION_NO = 110
                    OR SHOP_ORD_RPT.OPERATION_NO = 370) S1,
          (SELECT SHOP_ORD.SHOP_ORDER
           FROM   FLAME.SHOP_ORD
           WHERE  SHOP_ORD.ITEM = '3A2375'
                   OR SHOP_ORD.ITEM = '3A2703') S2
    WHERE S1.SHOP_ORDER = S2.SHOP_ORDER; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多