【问题标题】:create a sql join with more columns创建一个包含更多列的 sql 连接
【发布时间】:2018-04-27 21:43:35
【问题描述】:

我想创建一个带有逗号分隔连接的 sql 语句(在 PL SQL Developer 中)?

SELECT * FROM TABLE1 t1 JOIN TABLE2 t2 ON t1.tab_id, second_id = t2.tab_id, second_id;

我总是收到 ORA-00920 异常。如果我将其更改为两行:

t1.tab_id = t2.tab_id AND t1.second_id = t2.second_id;

然后我得到行。

如果我可以使用逗号分隔列的第一步,有人可以告诉我吗?

问候

【问题讨论】:

  • 不,你不能使用第一步。它在文档中的哪里说第一步会起作用???你读过文档吗???
  • 不是真的,但我认为这是可能的,因为 oracle 有不错的复活节彩蛋 :)

标签: sql join plsql plsqldeveloper


【解决方案1】:

你需要一个有效的条件:

SELECT *
FROM TABLE1 t1 JOIN
     TABLE2 t2
     ON t1.tab_id = t2.tab_id AND t1.second_id = t2.second_id;

我认为 Oracle 也会让你这样做:

SELECT *
FROM TABLE1 t1 JOIN
     TABLE2 t2
     ON (t1.tab_id, t1.second_id) in ( (t2.tab_id, t2.second_id) );

甚至:

SELECT *
FROM TABLE1 t1 JOIN
     TABLE2 t2
     USING (tab_id, second_id);

这是因为 JOIN 键在两个表中具有相同的名称。

【讨论】:

  • 感谢您的快速回复!!!但是,如果我有更多连接: SELECT * FROM tab1 t1 JOIN tab2 t2 ON t1.rab_id = t2.tab_id JOIN tab3 t3 ON t2.second_id,t2.third_id = t3.second_id,t3.third_id ... 我可以使用您的解决方案吗?
  • @Artist_Styler_57 。 . .每个ON/USING 子句都是它自己的条件。每个都可以采用这三种形式中的任何一种。
  • 如果我使用 using -> 正在工作! :) 但是如果我使用 ON (t1.tab_id, t1.second_id) = .... -> 我得到 ORA-00920 :(
  • @Artist_Styler_57 。 . .出于某种原因,Oracle 支持带有IN 但不支持= 的元组。这是一个容易忘记的细微差别。我更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多