2017-02-07 2 views
1

Я сделал следующий запрос, получить MIN(id) дубликатов path значений в таблице movies:Проблема с использованием MIN() в MySQL Query

SELECT m.id, m.user_id , m.path 
FROM movies m 
    INNER JOIN (
       SELECT Min(id) as movie_id, path, COUNT(*) 
       FROM movies 
       WHERE importer LIKE '%AS%' 
       GROUP BY path 
       HAVING COUNT(*) > 1) temp 
    ON temp.path = p.path 
     AND temp.movie_id = m.id 
     AND importer LIKE '%AS%' 

Я получил этот результат:

id  | user_id |  path | 
­­­­­­­­­­­­------------------------------------ 
2   | 1234 |  XXXX | 
8   | 4231 |  BBBB | 

Проблема что у меня есть другой фильм с тем же путем, но не отображается, потому что MIN() и GROUP BY path

Я хочу, чтобы сгруппировать путь но не Exlude другой путь, потому что я MIN(id)

Это ожидаемый результат:

id  | user_id |  path | 
­­­­­­­­­­­­------------------------------------ 
2   | 1234 |  XXXX | 
8   | 4231 |  BBBB | 
5   | 3421 |  BBBB | 

Что Я делаю не так?

@Tim Biegeleisen

Проблема с этим запросом я получить дублированные пути с той же user_id:

id  | user_id |  path | 
­­­­­­­­­­­­------------------------------------ 
    3523  12287   asd 
    3524  12287   asd 
    3525  12287   asd 

я должен получить мин идентификатор для каждого сгруппированных пути.

+1

Конечно, вы хотите, чтобы temp.importer был равен p.importer !! Помимо этого, см. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

DISTINCT (user_id)? – user3741598

+0

Пожалуйста, покажите нам образцы данных, если это возможно. –

ответ

1

Я думаю, что вы хотите сделать, это GROUP BYuser_idиpath, а затем выбрать запись, имеющую наименьший идентификатор фильма, должен ли быть несколько пользователей, связанных с данной path. Если это так, тогда должен работать следующий запрос:

SELECT m1.id, m1.user_id, m1.path 
FROM movies m1 
INNER JOIN 
(
    SELECT user_id, path, MIN(id) AS min_id 
    FROM movies 
    WHERE importer LIKE '%AS%' 
    GROUP BY user_id, path 
) m2 
    ON m1.path = m2.path AND 
     m1.user_id = m2.user_id AND 
     m1.id  = m2.min_id 
+1

@devtreat Я обновил свой ответ. Я думаю, вы хотите «GROUP BY» идентификатор пользователя и путь, а затем сохраните запись с минимальным идентификатором. –

+0

Этот запрос сделал то, что я хотел. Большое спасибо! – Coluh

Смежные вопросы