Как мне узнать, существует ли идентификатор в нескольких экземплярах другого столбца? [Дубликат]

0

Как я могу запросить таблицу 1, чтобы дать мне записи, где id2 существует более одного раза в id1?

table 1
id1, id2
1,100
1,99
1,98
2,100
2,101
2,102

Таким образом, желаемый результат

1,100
2,100
  • 0
    Вы можете найти 'group by id1' и 'count (id2)> = 2' полезными? Предложение «has» аналогично предложению «where», но применяется к «группам», а не к отдельным строкам.
  • 0
    @ryanvincent Если вы группируете по ID1 но пытаетесь вернуть и id1 и id2 вы получите случайное значение id2 для каждого отдельного id1 (в MySQL 5.6 или более ранней). В MySQL 5.7 или новее вы просто получите ошибку. Если вы опустите id2 в выходных данных и примените это предложение HAVING , вы получите две записи для id1 в возвращаемом виде: 1 и 2 что является бесполезным.
Теги:

3 ответа

0

Ваш лучший 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)
0

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

select id1, id2
from table
group by id2
having count(*) > 1
  • 0
    Я не верю, что это вернет то, что после ОП. Он вернет 100 для id2 и, случайно, 1 или 2 для id1 . В Mysql 5.7 или новее он выдаст ошибку, если они не отключили установку ALWAYS_FULL_GROUP_BY. sqlfiddle of mysql5.6
-2

Вы можете использовать une для соединения с id2 следующим образом:

SELECT 
    t1.id1
    ,t1.id2
FROM
    table1 as t1
inner join table1 as t2 on t2.id2 = t1.id2
  • 0
    Не уверен, куда вы шли с этим, но это возвращает какое-то странное перекрестное соединение, а не две записи, которые нужны после ОП.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню