sql - 在多对多关系表中显示正确结果
问题描述
我目前有三张桌子。
- master_tradesmen
- 交易
- 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 中的“交易”列仅用于显示目的,不用于查询。非常感谢您!
解决方案
您有一个商人目录和另一个行业目录。交易应该只在交易目录中出现一次,以使您的数据库更加一致
然后你有你的多对多表,它连接交易和主商人表。
如果我们想根据输入中的给定交易获取商人,我们首先应该知道该交易的 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
推荐阅读
- python - PyAudio 找不到模块 _portAudio
- github - 向 GITHUB 页面添加自定义 URL 不起作用
- amazon-web-services - 可以使用 AWS Workspace Application Manager 与其他区域或其他账户共享应用程序
- reactjs - Redux-saga:从 redux 操作返回承诺
- java - 模块不通信
- keycloak - Keycloak 只允许特定范围
- ios - 实现平台特定代码时如何使 FlutterViewController 符合委托模式?
- html - 我试图运行这个项目并尝试了谷歌的所有 npm 解决方案,但遇到了这个错误
- authentication - 如何在 Nest Js 中从 Google 登录验证 access_token
- reactjs - 仅当我单击输入时,模式窗口才会在 Escape 按钮上关闭