Звучит просто, но я застрялSQL JOIN вопрос (пока еще один)
Table A Table B
col_a col_b col_a col_c
1 b 1 c
2 c 2 d
3 z 3 a
4 d 4 e
33 a 5 k
6 l
33 b
33 b
Я хочу РЕГИСТРИРУЙТЕСЬ таблицу А с Б:
select * from A inner join B on A.col_a = B.col_a
Я ожидал, чтобы получить 5 записей в качестве результат.
Expected join result ** Actual result **
col_a col_b col_c col_x[n]... col_a col_b col_c col_y[n]...
1 b c ... 1 b c ...
2 c d ... 2 c d ...
3 z a ... 3 z a ...
4 d e ... 4 d e ...
33 a b ... 33 a b ...
33 a b ...
Почему MySQL соответствовал 33 дважды? Потому что они 2 значения с 33 в таблице B.
Что я хочу, это всего лишь одна запись с тем же значением в col_a. Как мне это сделать?
EDIT: Я обновляю дизайн таблиц, чтобы добавить больше столбцов, содержащих неидентичные данные, потому что они были такими, какими они задавали больше вопросов, чем решаемые проблемы. В любом случае, ответ на этот вопрос заключается в использовании GROUP BY, но штраф за производительность огромен, особенно на столе, который содержит более 50 миллионов записей (и растет). Однако лучший подход к решению моей проблемы состоял в том, чтобы использовать составной оператор (используя UNION ALL) для каждого отдельного значения в col_a. Преимущество производительности было x5 ~ x10 быстрее!
Обратите внимание на отсутствие 'INNER', поскольку' JOIN' сам по себе является 'INNER JOIN'. – vol7ron
Подзапрос не рекомендуется и зависит от плана запроса базы данных. но если у вас есть ** много ** дубликатов записей из обеих таблиц (по какой-то ужасной причине), то подзапрос уменьшит задействованную работу. – vol7ron
GROUP BY, похоже, делает трюк (хотя есть некоторые штрафные санкции)! –