【问题标题】:Using a 1999 ANSI SQL Join without a primary key使用没有主键的 1999 ANSI SQL 连接
【发布时间】:2019-08-11 15:54:38
【问题描述】:

这可能吗?目前我正在尝试通过我的数据库运行这一系列命令。但是,添加礼物的最后一行存在问题。这是因为该表没有设置主键。我需要为它设置一个主键,还是有其他方法可以解决这个问题?

SELECT b.title, p.name, m.gift
FROM books b
     JOIN publisher p USING (pubid)
     JOIN promotion m USING (gift); 

我得到的错误代码是。

SQL 错误:ORA-00904:“来自$_subquery$_003”。“GIFT”:无效标识符 00904。00000 - “%s:无效标识符”

【问题讨论】:

  • 我不认为using 依赖于主键。它应该只是在前面的表格中查找列名。
  • 将 SELECT b.title、p.name、m.Gift 替换为 SELECT b.title、p.name、Gift - Oracle 不喜欢在选择中限定使用字段。跨度>
  • 简单的ON有什么问题?
  • 请在您的帖子中包含错误消息以及 DDL 以重现问题。看起来它在告诉您 bookspublisher 没有 gift 列。
  • PK 和其他约束不需要加入。为什么你认为他们是?任何 2 个表都可以在任何条件下连接。了解 USING 的含义:r JOIN s USING (c,...)r JOIN s ON r.c=s.c AND ....。你到底想问什么?请通过编辑而不是 cmets 进行澄清。

标签: sql oracle join


【解决方案1】:

using 语法不依赖于作为主键的列或任何其他类型的键 - 它只依赖于两个表具有用于连接的同名列(参见,例如,the wikipedia article)。

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 2018-10-20
    • 2012-09-17
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2017-01-25
    相关资源
    最近更新 更多