Помогите мне решить эту проблему, я собираюсь присоединиться к 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;
минус имя инвестора таблица результатов
в то время как, если я делаю подзапрос, вызывающий ошибку
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;
Вы используете SQL Server или MS Access?
привет, я использую sql server, спасибо


Разве ты не этого хочешь? Два соединения на столе 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;
Если вы использовали его в качестве ответа, вы можете установить флажок, чтобы указать это.
Подзапрос должен быть скаляр. т.е. вернуть одно значение, но в настоящее время вы возвращаете набор результатов.
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;
Вы должны указать, какой движок базы данных вы используете. Также могут помочь некоторые желаемые результаты.