2013-06-19 3 views
1

У меня есть запрос, как это:Mysql запрос получить результаты, если поля не равны

select a.*, ag.Winstpercentage from Artikels a 
inner join Artikelgroep ag on a.`Artgroep`=ag.Groepcode 
where a.`Manuf_nr` in (some array) 

В этом запросе я имею price поле. Мне нужно сравнить Manuf_nr для всех этих полей, и если это то же самое, мне нужно проверить, что поля price не равны для строк, у которых одинаковые Manuf_nr. Кто-нибудь знает, как это сделать?

UPDATE: поля price в Artikels таблицы, поэтому я выбираю его под * Я изменил мой вопрос, так это выглядит, как этот

SELECT * 
FROM `Artikels` 
inner join (select * from Artikels) as totals 
     on Artikels.`Manuf_nr` = totals.`Manuf_nr` and 
      Artikels.`Vprijsexcl`!= totals.`Vprijsexcl` 
where Artikels.`Manuf_nr` in 
(select Manuf_nr from Artikels 
group by Manuf_nr having count(*) >1) 

но это занимает слишком много времени.. Кто-нибудь знает, как его ускорить? UPDATE: поле price это поле Vprijsexcl

Это то, что у меня есть:

my table

И мне нужно, чтобы получить все данные, где Manuf_nr равны и Vprijsexcl не равны.

+0

Можете ли вы предоставить образец данных и ожидаемый результат? – Uriil

+0

Я не уверен, что я понимаю, зачем вам нужны результаты для этого ... – MrCkobe

+0

Мы не можем видеть поле цены в «этом запросе». Этот вопрос, безусловно, нуждается в более подробной информации. – Sebas

ответ

1

Try:

SELECT * 
FROM `Artikels` 
inner join Artikels as totals 
     on Artikels.`Manuf_nr` = totals.`Manuf_nr` and 
      Artikels.`Vprijsexcl`!= totals.`Vprijsexcl` 

- оговорка where ... in (subquery) является излишней, так как основной запрос может только результатов возвращаемых от производителей, которые имеют более чем одну строки в таблице Artikels.

ОБНОВЛЕНО: Для того, чтобы видеть только различные цены для того же производителя, попробуйте:

SELECT `Manuf_nr`, group_concat(distinct `Vprijsexcl`) prices 
FROM `Artikels` 
GROUP BY `Manuf_nr` 
HAVING count(distinct `Vprijsexcl`) > 1 
+0

не может получить результат по этому запросу ... или требуется больше нескольких минут ti получить результаты – MrCkobe

+0

@MrCkobe: Я добавил запрос, который должен быть быстрее - как он сравнивается? –

+0

Я получаю blob в ценах – MrCkobe

0

насчет

SELECT Manuf_nr, Vprijsexcl, COUNT (*) 
FROM Artikels 
GROUP BY Manuf_nr, Vprijsexcl 
HAVING COUNT (*) > 1 

в котором перечислены Manuf_nr, Vprijsexcl комбинации, которые не являются уникальными.

EDIT:

Чтобы получить всю информацию о продуктах, которые имеют ярко выраженный Vprijsexcl для их Manuf_nr:

SELECT Artikels.* 
FROM Artikels 
INNER JOIN (SELECT Manuf_nr, Vprijsexcl, COUNT (*) 
      FROM Artikels 
      GROUP BY Manuf_nr, Vprijsexcl 
      HAVING COUNT (*) = 1) AS A 
USING (Manuf_nr, Vprijsexcl) 
+0

С помощью этого запроса я получаю только одну строку для каждого 'Manuf_nr',' Vprijsexc1', и я не знаю, что значение 'Vprijsexc1' отличается от другого поля' Vprijsexc1' с тем же 'Manuf_nr' – MrCkobe

+0

Это дает вам' Manuf_nr, Комбинации Vprijsexcl', которые не различаются. Если вы хотите перечислить отдельные, измените 'COUNT (*)> 1'' 'COUNT (*) = 1'. –

+0

Но проблема в том, что мне нужно проверить, является ли 'Manuf_nr' одинаковым, а затем сравнивает Vprijsexcl', а затем, если' Vprijsexcl' являются разными, я показываю его – MrCkobe

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