2014-11-22 5 views
0

Запрос:Как заказать SQL дубликатами с внутренним соединением?

SELECT results.Title, results.Tags 
FROM results 
INNER JOIN tags 
ON results.ID = tags.ID 
WHERE tags.Tag 
IN (?,?,?) 

Вышеприведенные возвращает много дублей. Я хочу заказать результаты, наиболее похожие на вершину. Упорядочено столбцом столбцов. (results.Tags)

I, то будет сгруппировать результаты

GROUP BY results.ID 

Пример Результаты:

Title  Tags 
Book 9  Blue, Green, Rivers 
Book 1  Trees, Mountains, Rivers 
Book 4  Dogs, Cats, Rivers 
Book 1  Trees, Mountains, Rivers 

желаемых результатов:

Title  Tags 
Book 1  Trees, Mountains, Rivers 
Book 4  Dogs, Cats, Rivers 
Book 9  Blue, Green, Rivers 

Duplicates на вершине.

То, что я пробовал. Однако это не удалось:

SELECT results.Title, results.Tags 
FROM results 
INNER JOIN tags 
ON results.ID = tags.ID 
WHERE tags.Tag 
IN (?,?,?) 
ORDER BY COUNT (Tags) //This makes the query error 
GROUP BY results.ID 
+0

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

+0

WHERE tags.Tag. Я удаляю строки с помощью JOIN. – seamus

+0

'order by' идет после' group by'. –

ответ

1

Из ваших попыток это то, что я понял. Может быть, вам нужно использовать подзапрос. Если бы вы могли предоставить некоторые примеры данных, было бы гораздо яснее

SELECT TITLE,TAGS,COUNT(*) 
FROM 
    (
     SELECT results.Title as Title , results.Tags as Tags 
     FROM results 
     INNER JOIN tags 
     ON results.ID = tags.ID 
     WHERE tags.Tag 
     IN (?,?,?) 
) 
GROUP BY TITLE,TAGS 
ORDER BY TAGS DESC 
2
SELECT X.Title, 
     X.Tags, 
     X.CNT 
FROM 
    (SELECT results.ID 
      count(tags.ID) AS CNT 
    FROM results 
    INNER JOIN tags ON results.ID = tags.ID 
    WHERE tags.Tag IN (?, ?, ?) 
    GROUP BY results.ID) X 
INNER JOIN tags ON X.ID = tags.ID 
ORDER BY X.CNT 
0
SELECT Title, Tag, count(a.ID) AS CNT 
FROM ( 

    SELECT results.Title, tags.Tag, results.ID 
    FROM results 
    INNER JOIN tags 
    ON results.ID = tags.results_ID 
    WHERE tags.Tag 
    IN (?,?,?) 

) AS a 
GROUP BY a.ID 
ORDER BY CNT DESC"; 

Я добавил столбец ID. Создайте основной запрос. Закрепите его в круглых скобках и назовите его.

(main query) AS a 

Затем выше выберите нужную информацию из этого запроса. В моем случае количество дубликатов.

SELECT COUNT(a.id) FROM (main query)AS a 

В конце после скобка группы дубликаты и порядок их по количеству

GROUP BY a.ID 
    ORDER BY CNT DESC 
Смежные вопросы