SQL Server: внутреннее / левое соединение приводит к слишком большому количеству строк

0

Прежде всего я проверил все темы "SQL Server: объединить результаты в слишком много строк" здесь, в Stackoverflow и других веб-сайтах, но не смог получить правильный код, и поэтому вам понадобится ваш советник в качестве новобранец. Моя задача - добавить 1 столбец из таблицы B в таблицу A, которая будет предоставлять категорию элемента. Table A имеет только 13288 строк, но когда я присоединяюсь, результаты будут 211657 строк. Я попробовал, чтобы Left Join получал одинаковые результаты строк. Я хотел сделать GROUP BY или DISTINCT но в table A есть дубликаты ticket_ids поэтому вы тоже не хотите их испортить.

Вот код, который у меня есть.

SELECT     Table1.*, Table2.Category
FROM       Table1
INNER JOIN Table2 ON Table1.ticket_id =  Table2.ticket_id
  • 0
    Причина в том, что в Table2 есть дубликат ticket_id. Таким образом, Table1, объединенный с Table2, расширит строки. Вы можете сделать «группировать по» ticket_id в Таблице 2 перед присоединением.
  • 0
    Я попробовал приведенный ниже код, но получал, только одно выражение может быть указано в списке выбора, когда подзапрос не введен с EXISTS. SELECT Table1.*, ( SELECT Table2.Category, MAX(Table2.ticket_id) FROM Table2 GROUP BY Table2.ticket_id ) FROM Table1 INNER JOIN Table2 ON Table1.ticket_id = Table2.ticket_id COLLATE Latin1_General_CI_AS_KS_WS
Показать ещё 3 комментария
Теги:

1 ответ

0

Странно, что левое соединение не работает. Однако вы можете попробовать:

SELECT     
   t1.*, (select t2.Category from Table2 as t2 where t2.ticket_id = t1.ticket_id limit 1) as Category
FROM       
   Table1 as t1
  • 0
    Я думаю, что производительность не очень хорошая. Это (sql) должно быть сохранено в Table2 в From, но сначала сделать подзапрос для «group by».
  • 0
    Где я буду размещать COLLATE Latin1_General_CI_AS_KS_WS в вашем коде? Я пытался добавить его после Table1 как t1 или перед "как категория". но не работает

Ещё вопросы

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