Для краткости позволяет сказать, у меня есть таблица, которая выглядит следующим образом:Выбрать без дубликата
item_name item_location item_price
PROMO_A local 5
B local 7
PROMO_A global 8
Теперь, что я делаю, я выбрать все записи, в которых item_location является «местным» или где item_name
содержит слово PROMO
, но item_location
не является «местным». Это, на мой SQL запрос выглядит просто:
SELECT * FROM mytable WHERE item_location='local' OR (item_name like 'PROMO%' AND item_location != 'local');
Теперь, это может произойти, как в примере данных я настроил выше, что я хотел бы получить два одинаковых item_name
«s, так что я задаюсь вопросом, как я мог исправить этот запрос, чтобы последний не был добавлен? Я могу исправить это, написав PHP-программу, которая будет проходить через записи и удалять дубликаты (мне нужно удалить дубликаты (те, у которых одинаковое имя_пользователя), которые имеют item_location == 'global'), но мне было интересно, может ли это быть выполняется только с помощью SQL? Я думал создать временную таблицу из вышеуказанного запроса, а затем запросить отдельные записи item_name, но как же тогда я в этом случае удалю те, у которых item_location «global»?
В любом случае, любая помощь приветствуется.
Редактировать: Я создал SQL Fiddle link for this.
edit2: Мне удалось получить эту работу с помощью следующего запроса:
SELECT * FROM туЬаЫе WHERE item_location = 'местный'
UNION
SELECT * FROM туЬаЫе ГДЕ item_name LIKE 'PROMO%' AND item_name NOT IN
(SELECT item_name from mytable WHERE item_location = 'local')
И ссылка для скрипта sql для этого является here.
Теперь я считаю, что это можно было бы обработать лучше, поэтому, если у кого-то есть лучшие подходы, я хотел бы услышать ваши мысли.
Вы пытались использовать DISTINCT или поля? –