如何从 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 个不同的表中插入内连接的主要内容,如果未能解决你的问题,请参考以下文章