【问题标题】:How to insert a inner join from 3 different tables如何从 3 个不同的表中插入内连接
【发布时间】:2021-05-14 22:27:38
【问题描述】:

我正在创建一个视图,从 3 个不同的表中提取数据以进行查询。到目前为止,这是我的代码,我只是不确定如何集成内部连接,因为我已经有一个 select 语句,我无法想象它。重写我的代码将不胜感激!

AS SELECT c.nutritional_value, i.item_id, i.item_name,
m.sell_price, m.buy_price
FROM consumables c, items i, merchants m
WHERE c.item_id=i.item_id
AND c.item_id=m.item_id```

【问题讨论】:

  • 这里有什么问题?当您放置涉及两个表的where 条件时,两个表的内部连接已经(隐式和旧式形式)集成。但它在 ANSI 连接形式中更具可读性和调试性,the documentation 中有很多示例很好地解释了这一点。

标签: sql oracle view


【解决方案1】:

你已经有一个内连接;您只是使用旧的逗号连接语法而不是(更现代的)ANSI 语法编写它。

SELECT c.nutritional_value,
       i.item_id,
       i.item_name,
       m.sell_price,
       m.buy_price
FROM   consumables c,         -- The comma indicates a CROSS JOIN
       items i,               -- The comma indicates a CROSS JOIN
       merchants m
WHERE  c.item_id=i.item_id    -- This filter condition implicitly converts the first join to
                              -- an INNER JOIN
AND    c.item_id=m.item_id    -- This filter condition implicitly converts the second join to
                              -- an INNER JOIN

如果您想使用 ANSI 语法显式重写它,那么:

  • 用连接类型替换逗号;那么
  • 在要连接的表的标识符之后添加一个包含连接条件的ON 子句。
SELECT c.nutritional_value,
       i.item_id,
       i.item_name,
       m.sell_price,
       m.buy_price
FROM   consumables c
       INNER JOIN items i     ON c.item_id=i.item_id
       INNER JOIN merchants m ON c.item_id=m.item_id

【讨论】:

    【解决方案2】:

    我几乎每天都进行这种转换。我认为为我使用的其中一个应用程序编写 SQL 的人在 VB 方面具有丰富的经验。 (不是 SQL)

    SELECT c.nutritional_value
    , i.item_id
    , i.item_name
    , m.sell_price
    , m.buy_price
    
    FROM consumables c
      inner join items i on c.item_id=i.item_id
      inner join merchants m on c.item_id=m.item_id
    

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多