首页 > 解决方案 > 在多对多关系表中显示正确结果

问题描述

我目前有三张桌子。

  1. master_tradesmen

在此处输入图像描述

  1. 交易

在此处输入图像描述

  1. master_tradesmen_trades(以多对多的关系将前两个连接在一起)。“trade_id”和“master_tradesman_id”是外键。

在此处输入图像描述

这是我需要发生的事情。用户执行搜索并输入交易。我需要一个查询来显示 master_tradesmen 表中的所有信息,这些信息在 master_tradesmen_trade 表中的交易与搜索匹配。例如,如果在搜索栏 (trade_id 1) 中键入“管道”,则将从 master_tradesmen 表中显示 Steve Albertsen (master_tradesman_id 6) 和 Brian Terry (master_tradesman_id 8) 的所有列。作为一个 SQL 初学者,试图掌握其中的逻辑,我的脑袋都快炸了。我希望拥有更高级 SQL 知识的人可以比我更容易地解决这个问题。注意:master_tradesmen 中的“交易”列仅用于显示目的,不用于查询。非常感谢您!

标签: sqlmany-to-many

解决方案


您有一个商人目录和另一个行业目录。交易应该只在交易目录中出现一次,以使您的数据库更加一致

然后你有你的多对多表,它连接交易和主商人表。

如果我们想根据输入中的给定交易获取商人,我们首先应该知道该交易的 id 必须是唯一的,因此在您的数据库中您将拥有类似 img 的东西。以下 :

在此处输入图像描述

现在我们可以进行查询以选择 trade 的 id :

DECLARE @id_trade int = SELECT trade_id FROM trades WHERE trade_name LIKE '%plumbing%'

一旦我们知道交易 ID,我们就可以重定向到“master_tradesmen_trades”表,以了解交易如何运作的人的姓名:

SELECT * FROM  master_tradesmen_trades WHERE trade_id = @id_trade

您将得到以下结果:

在此处输入图像描述

你可能会说,'但还是有问题,因为我仍然无法看到商人',这是我们进行内部连接的时刻:

SELECT * FROM  master_tradesmen_trades trades_and_tradesmen
INNER JOIN master_tradesman tradesmen
ON tradesmen.id = trades_and_tradesmen.master_tradesmen_id
WHERE trade_id = @id_trade

如果您需要查看特定列,您可以执行以下操作:

SELECT first_name, last_name, city, state FROM  master_tradesmen_trades trades_and_tradesmen
INNER JOIN master_tradesman tradesmen
ON tradesmen.id = trades_and_tradesmen.master_tradesmen_id
WHERE trade_id = @id_trade

推荐阅读