Mysql выберите отличные - PullRequest
       47

Mysql выберите отличные

32 голосов
/ 31 августа 2011

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

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

1-й работает нормально

теперь, когда я пытаюсь выбрать все поля, я получаю ошибки

я пытаюсь выбрать самый последний из дубликатов, скажем ticket_id 127 3 раза для идентификатора строки 7,8,9, поэтому я хочу выбрать его один раз с последней записью, которая в этом случае будет 9, и это относится к все остальные из ticket_id

Любая идея спасибо

Ответы [ 5 ]

72 голосов
/ 31 августа 2011

DISTINCT - это не функция, которая применяется только к некоторым столбцам. Это модификатор запроса, который применяется ко всем столбцам в списке выбора.

То есть DISTINCT уменьшает строки, только если все столбцы идентичны столбцам другой строки.

DISTINCT должен следовать сразу после SELECT (вместе с другими модификаторами запросов, такими как SQL_CALC_FOUND_ROWS). Затем, следуя модификаторам запроса, вы можете перечислить столбцы.

  • ПРАВО: SELECT DISTINCT foo, ticket_id FROM table...

    Вывести строку для каждой отдельной пары значений в ticket_id и foo.

  • НЕПРАВИЛЬНО: SELECT foo, DISTINCT ticket_id FROM table...

    Если есть три разных значения ticket_id, будет ли возвращаться только три строки? Что если существует шесть различных значений foo? Какие три значения из шести возможных значений foo должны быть выведены?
    Это неоднозначно, как написано.

42 голосов
/ 31 августа 2011

Вы ищете "SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id?

ОБНОВЛЕНИЕ

SELECT t.* 
FROM 
(SELECT ticket_id, MAX(id) as id FROM temp_tickets GROUP BY ticket_id) a  
INNER JOIN temp_tickets t ON (t.id = a.id)
8 голосов
/ 04 февраля 2014

Вы можете использовать группу по вместо отдельного.Потому что, когда вы используете разные, вам будет трудно выбрать все значения из таблицы.В отличие от использования group by, вы можете получить различные значения, а также все поля в таблице.

2 голосов
/ 14 декабря 2013

Вы можете использовать так

mysql_query ("ВЫБЕРИТЕ DISTINCT (ticket_id), column1, column2, column3 FROM temp_tickets ORDER BY ticket_id")

0 голосов
/ 31 августа 2011

используйте подвыбор:

http://forums.asp.net/t/1470093.aspx

...