如何从 3 个不同的表中插入内连接

Posted

技术标签:

【中文标题】如何从 3 个不同的表中插入内连接【英文标题】:How to insert a inner join from 3 different tables 【发布时间】: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 中有很多示例很好地解释了这一点。 【参考方案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

【讨论】:

以上是关于如何从 3 个不同的表中插入内连接的主要内容,如果未能解决你的问题,请参考以下文章

使用内连接 SQLITE 从两个表中删除行

如何从 MSDE 2000 中由 3 个连接选择的表中删除文件?

内连接和没有任何连接条件的表中有两个ON条件是啥意思

数据库操作-内连接外连接

从内部连接表中检索最新记录

Codeigniter - 如何内连接?