Как объединить ровно одно совпадение на отдельной таблице в mysql? - PullRequest
0 голосов
/ 03 февраля 2012

У меня проблема с mysql, что вы могли бы помочь. У меня есть 2 таблицы со следующей структурой и несколько строк образца

TABLE 1
-------
LISTID     NAME        10_OTHER_COLUMNS
---------------------------------------
1          List1
2          List2
3          List3

TABLE 2
-------
LISTID      LISTTYPE(ENUM, 4 options)
------------------------------------------------
1           type1
1           type2
2           type3
3           type1
3           type2
3           type3

Отношение один ко многим из ТАБЛИЦЫ 1 в ТАБЛИЦУ 2. Я хочу сделать выбор в ТАБЛИЦЕ 1, где строки возвращаются ТОЛЬКО, и ТОЛЬКО ЕСЛИ они точно соответствуют одному из ТАБЛИЦЫ 2. Объясняя лучше, список может иметь более одного типа, если я просто сделаю:

SELECT t1.*
FROM table_1 t1
LEFT JOIN table_2 t2 USING (listid)
WHERE t2.listtype = 'type3'

Возвращает Список2 и Список3 . Я хочу удалить List3 из результатов и иметь только List2 . Есть идеи?

1 Ответ

1 голос
/ 03 февраля 2012

Хорошо, я думаю, я понял ... Вы просите ex: "type3", пояснение на английском языке будет уточнено ...

Дайте мне список всех таблиц (т.е. ListID), что МОЖЕТ иметь ТОЛЬКО один код, который я ищу, и ничего больше, не связанный ни с какими другими «типами».Около пары миллионов записей, я бы скорректировал его таким образом, который также может быть быстрее в целом.

select 
      t1.*
   from
      Table2 t2Required

         LEFT JOIN Table2 as t2Extra
            on t2Required.ListID = t2Extra.ListID
           AND NOT t2Extra.type = 'type3'

         JOIN Table1 t1
            on t2Required.ListID = t1.ListID
   where
          t2Required.type = 'type3'
      and t2Extra.ListID IS NULL

Я также хотел бы знать разницу в производительности на втором.Этот второй подход на самом деле работает, основываясь на ожидаемом намерении "не найди меня", но не требует дополнительного выбора.Присоединяя table2 к себе с тем же идентификатором, но с «любым другим» типом, чем тот, который мы ищем, единственное, что нам нужно, - это запись, которую МЫ НЕ ДАЕМ найти в экземпляре t2Extra.ПОТОМ получим имя таблицы от t1 ...

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