Вопрос по mysql запросу

DriverCat
На сайте с 10.04.2008
Offline
116
519

Добрый день!

Есть запрос:

SELECT * FROM objects AS a LEFT JOIN regions AS r ON r.id = a.metro LEFT JOIN highways AS h ON h.id = a.street WHERE type='Земля' AND oper='Аренда' AND ((area_min>='0.2' AND area_max<='2.5') OR (area_max<='2.5' AND area_min>='2.5') OR (area_min<='0.2' AND area_max>='2.5')) AND highway='Новорязанское' 

Нашлось, например, 2 строчки. А мне надо добить до 3-х. Делаю второй запрос без последнего параметра:

SELECT * FROM objects AS a LEFT JOIN regions AS r ON r.id = a.metro LEFT JOIN highways AS h ON h.id = a.street WHERE type='Земля' AND oper='Аренда' AND ((area_min>='0.2' AND area_max<='2.5') OR (area_max<='2.5' AND area_min>='2.5') OR (area_min<='0.2' AND area_max>='2.5'))

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

Как сделать, чтобы не было в итоге дублей?

D5
На сайте с 01.06.2004
Offline
51
#1

Попробуйте так:

SELECT DISTINCT * FROM objects AS ...

Программирование сайтов (http://lindir.ru)
[Удален]
#2

Хотел предложить использовать оператор EXCEPT не вникая в запросы, оказалось что mysql до сих пор не поддерживает его😒 Предлагается использовать извращения вроде этих..

DriverCat
На сайте с 10.04.2008
Offline
116
#3
dk547:
Попробуйте так:
SELECT DISTINCT * FROM objects AS ...

Вы немного не поняли - у меня два разных запроса. Если первый не дал мне 3 строчек, я использую второй.

D5
На сайте с 01.06.2004
Offline
51
#4
DriverCat:
Вы немного не поняли - у меня два разных запроса. Если первый не дал мне 3 строчек, я использую второй.

Хм, Вы хотите решить это только средствами mysql?

Я обычно такие вещи объединяю на стороне движка, т.к как сказал Alexius пересечение в mysql получить сложно и часто не оптимально. Для программной склейки можно использовать какой-то уникальный ключ или суррогатный md5 от данных строчки, к примеру.

DriverCat
На сайте с 10.04.2008
Offline
116
#5
Alexius:
Хотел предложить использовать оператор EXCEPT не вникая в запросы, оказалось что mysql до сих пор не поддерживает его😒 Предлагается использовать извращения вроде этих..

Это мне тогда проще просто перечислить id которые уже нашлись - рабоать будет быстрее. Думал как-то более гибко это можно решить... Но все равно спасибо!

[Удален]
#6

Ну если вникнуть в запросы, то естественно так:

SELECT * FROM objects AS a LEFT JOIN regions AS r ON r.id = a.metro LEFT JOIN highways AS h ON h.id = a.street WHERE type='Земля' AND oper='Аренда' AND ((area_min>='0.2' AND area_max<='2.5') OR (area_max<='2.5' AND area_min>='2.5') OR (area_min<='0.2' AND area_max>='2.5')) AND highway!='Новорязанское'
dk547:

Я обычно такие вещи объединяю на стороне движка, т.к как сказал Alexius пересечение в mysql получить сложно и часто не оптимально.

Тут вычитание, а не пересечение...

DriverCat
На сайте с 10.04.2008
Offline
116
#7
Alexius:
Ну если вникнуть в запросы, то естественно так:
SELECT * FROM objects AS a LEFT JOIN regions AS r ON r.id = a.metro LEFT JOIN highways AS h ON h.id = a.street WHERE type='Земля' AND oper='Аренда' AND ((area_min>='0.2' AND area_max<='2.5') OR (area_max<='2.5' AND area_min>='2.5') OR (area_min<='0.2' AND area_max>='2.5')) AND highway!='Новорязанское'


Спасибо, туплю!!!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий