【问题标题】:Multiple Selects and a Join ..SQL Oracle多选和联接 ..SQL Oracle
【发布时间】:2012-03-03 08:30:13
【问题描述】:
SELECT table1.col1, table2.col2
FROM table1
WHERE col3
IN(SELECT col1 FROM table3 WHERE col4 IN(SELECT col4 FROM table4 WHERE col5 LIKE '%XYZ%'))
INNER JOIN table2 ON table1.col1=table2.col6
ORDER BY table1.col1

我得到一个ORA00933 error.SQL command not properly ended. 如果我删除连接,查询就可以完美运行。但我需要加入。该错误位于 LIKE 关键字附近。我该如何解决?

【问题讨论】:

  • 尝试将 WHERE 语句移到 JOIN 之后,就在 ORDER BY 之前。不要认为即使是 Oracle 也不支持在 JOIN 语句中间使用 WHERE。

标签: sql oracle select join


【解决方案1】:

您放错了INNER JOIN,它位于您的WHERE 子句中。

请注意,您可能希望采用 一些 格式化方案来编写 SQL 语句。它使发现此类错误变得更加容易。

SELECT table1.col1, table2.col2 
FROM   table1 
       INNER JOIN table2 ON table1.col1=table2.col6 
WHERE  col3 IN (
          SELECT col1 
          FROM table3 
          WHERE col4 IN (
             SELECT col4 
             FROM table4 
             WHERE col5 LIKE '%XYZ%'
          )
       ) 
ORDER BY table1.col1

【讨论】:

  • 是否有任何 SQL 编辑器免费软件可以帮助格式化此类查询?
  • 很可能会有,但我从来没有发现需要实际搜索一个。我自己还没有完全确定一种特定的风格。
【解决方案2】:

尝试在 WHERE 子句之前移动您的联接:

    SELECT table1.col1, table2.col2
    FROM table1
    INNER JOIN table2 ON table1.col1=table2.col6
    WHERE col3
    IN(SELECT col1 FROM table3 WHERE col4 IN(SELECT col4 FROM table4 WHERE col5 LIKE '%XYZ%'))
    ORDER BY table1.col1

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-06-09
    • 2020-07-28
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多