Присоединяйтесь к 2 внешним ключам с помощью подзапроса

Помогите мне решить эту проблему, я собираюсь присоединиться к 2 таблицам для 2 разных внешних ключей в одном столбце, снимок таблицы приведен ниже:

таблица пользователей

Присоединяйтесь к 2 внешним ключам с помощью подзапроса

таблица транзакций

Присоединяйтесь к 2 внешним ключам с помощью подзапроса

Я хочу вернуть топ-5 на основе суммы транзакций от high-low, а также отобразить идентификатор транзакции, идентификатор инвестора, имя инвестора, идентификатор заемщика, имя заемщика, сумму

следующий запускается правильно, но не содержит имени инвестора

select top 5 t.id,
    investor_id,
    borrower_id,
    username as BorrowerName,
    amount
    from transactions t join users u on t.borrower_id = u.id
    order by t.amount desc;

минус имя инвестора таблица результатовПрисоединяйтесь к 2 внешним ключам с помощью подзапроса

в то время как, если я делаю подзапрос, вызывающий ошибку

select top 5 t.id,
    investor_id,
    (select username from users join transactions on users.id = 
    transactions.investor_id) investorName,
    borrower_id,
    username BorrowerName,
    amount
     from transactions t join users u on t.borrower_id = u.id
     order by t.amount desc;

Вы должны указать, какой движок базы данных вы используете. Также могут помочь некоторые желаемые результаты.

Abbas Mashayekh 06.05.2018 09:42

Вы используете SQL Server или MS Access?

Tim Biegeleisen 06.05.2018 09:54

привет, я использую sql server, спасибо

user9092800 06.05.2018 15:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
968
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Разве ты не этого хочешь? Два соединения на столе users

SELECT TOP 5
  investor_id,
  investors.username InvestorName,
  borrower_id,
  borrowers.username BorrowerName,
  amount
FROM
  transactions
  INNER JOIN users investors ON (transactions.investor_id = investors.id)
  INNER JOIN users borrowers ON (transactions.borrower_id = borrowers.id)
ORDER BY
  amount desc;

В этом случае я бы не рекомендовал использовать подзапросы, поскольку база данных будет вынуждена выполнять два последовательных сканирования во вложенном цикле для каждой строки.

Ответ принят как подходящий
select top 5 t.id,
       investor_id, ui.username as InvestorName,
       borrower_id, ub.username as BorrowerName,
       amount
  from transactions t 
  join users ub on t.borrower_id = ub.id
  join users ui on t.investor_id = ui.id   
 order by t.amount desc;

Если вы использовали его в качестве ответа, вы можете установить флажок, чтобы указать это.

paparazzo 06.05.2018 15:30

Подзапрос должен быть скаляр. т.е. вернуть одно значение, но в настоящее время вы возвращаете набор результатов.

select top 5 t.id,
    investor_id,
    (-- Correlated Scalar Subquery, returns a single value
      select username 
      from users
      WHERE users.id = transactions.investor_id) investorName,
    borrower_id,
    username BorrowerName,
    amount
     from transactions t join users u on t.borrower_id = u.id
     order by t.amount desc;

Другие вопросы по теме