2016-06-16 3 views
0

Уверен, на этот вопрос уже был дан ответ, но я не могу найти его или ответ был слишком сложным. Я новичок в SQL и не знаю, как это говорить в общем.SQL Возврат всех строк, где повторяются 2 значения

У меня есть база данных mySQL программного обеспечения, установленного на устройствах. Мой запрос, чтобы вытащить все данные, содержит больше полей и больше соединений, но для краткости я просто включил несколько. Мне нужно добавить другое измерение для создания отчета, в котором перечислены все случаи, когда устройство имеет более одной установки программного обеспечения из одного семейства продуктов.

sample

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

select 
devices.name, 
sw_inventory.product, 
products.family_name, 
sw_inventory.ignore_usage, 

from sw_inventory 

inner join products 
on sw_inventory.product=products.product_name 

inner join devices 
on sw_inventory.device_name=devices.name 

where sw_inventory.ignore=0 

group by devices.name, products.family_name 
+0

Во-первых, у меня нет всей схемы и добавления нескольких примеров для схемы, и то, что ожидаемый результат выглядит, очень поможет. Тем не менее, я просто догадываюсь, что вы хотите «group by devices.name иметь счет (device.name)> 0' или что-то в этом роде. –

+0

Ваш запрос плохо написан и неопределен. У вас есть столбцы в 'select'1, которые не агрегированы, ни аргументы для функций агрегации. –

+0

Я сделал подмножество, так что, возможно, это мне больно. Но и да, я уверен, что это плохо написано! Отсюда вопрос :) – Allegra

ответ

1

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

В основном это двухэтапный процесс. 1 найдите дубликаты 2, относящиеся к исходным записям, если вы хотите их. Обратите внимание, что вторая часть является необязательной.

Так буквально найти все дубликаты запроса вы предоставили

ADD HAVING COUNT(*) > 1 после group by заявлений. Если вы хотите узнать, сколько дубликатов добавить вычисляемый столбец для их подсчета.

select 
devices.name, 
sw_inventory.product, 
products.family_name, 
sw_inventory.ignore_usage, 
NumberOfDuplicates = COUNT(*) 
from sw_inventory 

inner join products 
on sw_inventory.product=products.product_name 

inner join devices 
on sw_inventory.device_name=devices.name 

where sw_inventory.ignore=0 

group by devices.name, products.family_name 

HAVING COUNT(*) > 1 
Смежные вопросы