Отображать правильные результаты во многих таблицах отношений - PullRequest
0 голосов
/ 01 апреля 2020

У меня сейчас три таблицы.

  1. master_tradesmen

enter image description here

сделки

enter image description here

master_tradesmen_trades (объединяет два предыдущих в отношениях «многие ко многим»). 'Trade_id' и 'master_tradesman_id' являются внешними ключами.

enter image description here

Вот что мне нужно сделать. Пользователь выполняет поиск и вводит в сделку. Мне нужен запрос, который отображает всю информацию из таблицы master_tradesmen, чья сделка в таблице master_tradesmen_trade соответствует поиску. Например, если в строке поиска введено «слесарное дело» (trade_id 1), из таблицы master_tradesmen будут отображены все столбцы для Стива Альбертсена (master_tradesman_id 6) и Брайана Терри (master_tradesman_id 8). Как новичок в SQL, попытка набросать asp логику c вот-вот заставит мою голову взорваться. Я надеюсь, что кто-то с более продвинутым знанием SQL сможет справиться с этим намного легче, чем я. Примечание: столбец 'trades' в master_tradesmen предназначен только для отображения, а не для запросов. Заранее большое спасибо!

1 Ответ

2 голосов
/ 01 апреля 2020

У вас есть каталог для торговцев и другой каталог для торгов. Сделки должны появляться в каталоге сделок только один раз, чтобы сделать вашу БД более согласованной

Тогда у вас есть таблица «многие ко многим», которая соединяет таблицы «Сделки и мастера».

Если Мы хотим получить торговцев в соответствии с заданной сделкой на входе. Сначала мы должны знать идентификатор этой сделки, который должен быть уникальным, поэтому в вашей БД у вас будет что-то вроде img. ниже:

enter image description here

Теперь мы можем сделать запрос для выбора идентификатора сделки:

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

Вы получите следующий результат:

enter image description here

Вы можете сказать: «Но с этим все еще что-то не так, поскольку я все еще не могу видеть торговцев», это момент, когда мы совершаем внутреннее соединение:

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

Если вам нужно увидеть указанные c столбцы, вы можете сделать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...