2016-02-08 3 views
1

Я улучшал свои знания SQL, но до сих пор не понял, как создавать некоторые запросы.Выбор коррелированных записей из базы данных

У меня есть следующие таблицы в базе данных SQL Server:

пользователя (идентификатор, имя)

займа (id_sender, id_receiver, сумма, дата, date_payment)

Что будет действительным запросом:

  1. Выберите имя пользователя, который отправил кредит s другому пользователю, как в 2014 и 2015
  2. Выберите пары (ID1, ID2) пользователей, приславших кредиты друг другу

Все предложения высоко оценили!


Edit 1:

Мои попытки:

1.

SELECT name FROM User WHERE id IN (
    SELECT id_sender FROM Loan WHERE 
    id_receiver IN (SELECT DISTINCT id_receiver WHERE YEAR(date) = 2014) AND 
    id_receiver IN (SELECT DISTINCT id_receiver WHERE YEAR(date) = 2015) 
) 

2.

SELECT id1, id2 FROM (
    SELECT DISTINCT id_sender as id1 FROM Loan 
    WHERE id_receiver IN (
     SELECT DISTINCT id_sender FROM Loan 
     WHERE id_receiver = ??? 
    ) 
    (?) 
) 
+0

Что вы пытаетесь до сих пор. Добавьте свою попытку. Мы попытаемся исправить это. –

+0

Добавили их. Спасибо за вашу помощь! – shardl

ответ

1

Пример 1: В случае, если ваш date столбец имеет индекс , лучше не используйте функцию вокруг столбца, чтобы вы могли фактически использовать индекс.

SELECT name 
FROM User 
WHERE id IN (SELECT id_sender FROM Loan WHERE date >= '1/1/2014' AND date < '1/1/2015') 
    AND id IN (SELECT id_sender FROM Loan WHERE date >= '1/1/2015' AND date < '1/1/2016') 

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

SELECT 
    L1.id_sender AS id1, 
    L1.id_receiver AS id2 
FROM Loan L1 
    INNER JOIN Loan L2 
     ON L1.id_sender = L2.id_receiver 
      AND L2.id_sender = L1.id_receiver 
0
SELECT name 
FROM user 
WHERE id EXISTS (
    Select Distinct id_sender 
    FROM loan 
    WHERE year(date) between 2014 and 2015 
) 
SELECT s.id1,s.id2, s.monto, p.nombre 
FROM sap s INNER JOIN sop p 
ON s.id1 = p.id_comun INNER JOIN sap a 
ON a.id2 = p.id_comun 
UNION 
SELECT s.id1,s.id2, s.monto, p.nombre 
FROM sap s INNER JOIN sop p 
ON s.id1 = p.id_comun INNER JOIN sap a 
ON a.id2 = p.id_comun 
Смежные вопросы