Как я могу получить запись с двумя соответствующими столбцами, которые кратны в SQL? - PullRequest
0 голосов
/ 10 февраля 2019

Например, у меня есть две таблицы:

ID | Name
------------
1  | test 1 
2  | test 2 

ID2| ID | Age
--------------
1  | 1  | 18
2  | 1  | 18
3  | 1  | 19
4  | 2  | 18
5  | 2  | 19

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

Я хочу вывод, подобный этому:

Name     | Age
--------------------
test 1   | 18
test 1   | 18

Кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Вы также можете использовать IN на наборах.

И GROUP BY можно комбинировать с HAVING, чтобы получить только те, которые имеют дубликаты (имя, возраст).

SELECT t1.Name, t2.Age
FROM YourTable2 t2
LEFT JOIN YourTable1 t1 ON t1.ID = t2.ID
WHERE (t2.ID, t2.Age) IN (
      SELECT ID, Age
      FROM YourTable2
      GROUP BY ID, Age
      HAVING COUNT(*) > 1
  );
0 голосов
/ 10 февраля 2019

Попробуйте следующий запрос:

Select t1.*, t2.* 
from table1 t1
join table2 t2
on  t1.id = t2.id
join (select id, age
      from table2
      group by id, age
      having count(*) > 1
     ) t3
on t1.id = t2.id and t2.id = t3.id and t2.age = t3.age
0 голосов
/ 10 февраля 2019

Использование exists:

select t.*
from t
where exists (select 1
              from t t2
              where t2.name = t.name and t2.age = t.age and
                    t2.id <> t.id
             );

При индексе (name, age, id) это должен быть самый быстрый подход.

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