Как я могу запросить таблицу 1, чтобы дать мне записи, где id2 существует более одного раза в id1?
table 1
id1, id2
1,100
1,99
1,98
2,100
2,101
2,102
Таким образом, желаемый результат
1,100
2,100
Ваш лучший id2
здесь - это подзапрос, чтобы получить значения id2
которые появляются более одного раза в вашей таблице. Затем верните записи из таблицы, содержащие эти значения id2
. Есть несколько способов сделать это.
Здесь вы используете предложение IN
и просто нажимаете список, возвращаемый подзапросом:
SELECT id1, id2
FROM table1
WHERE id2 IN (SELECT id2 FROM table1 GROUP BY id2 HAVING count(*) > 1)
И другой, используя коррелированный подзапрос, который может оказаться полезным, если ваши данные больше
SELECT id1, id2
FROM table1 t1
WHERE EXISTS (SELECT id2 FROM table1 WHERE t1.id2 = id2 GROUP BY id2 HAVING count(*) > 1)
Вы можете использовать следующий запрос, чтобы определить, существует ли идентификатор в нескольких экземплярах другого столбца:
select id1, id2
from table
group by id2
having count(*) > 1
100
для id2 и, случайно, 1
или 2
для id1
. В Mysql 5.7 или новее он выдаст ошибку, если они не отключили установку ALWAYS_FULL_GROUP_BY. sqlfiddle of mysql5.6
Вы можете использовать une для соединения с id2 следующим образом:
SELECT
t1.id1
,t1.id2
FROM
table1 as t1
inner join table1 as t2 on t2.id2 = t1.id2
ID1
но пытаетесь вернуть иid1
иid2
вы получите случайное значениеid2
для каждого отдельногоid1
(в MySQL 5.6 или более ранней). В MySQL 5.7 или новее вы просто получите ошибку. Если вы опуститеid2
в выходных данных и примените это предложениеHAVING
, вы получите две записи дляid1
в возвращаемом виде:1
и2
что является бесполезным.