Как проигнорировать столбец для выбора, отличного в postgresql?

Привет все!

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

"SELECT name, id, 'place' AS tablename FROM places WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'community' AS tablename FROM communities WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'district' AS tablename FROM districts WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'region' AS tablename FROM regions WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."UNION SELECT name, id, 'province' AS tablename FROM provinces WHERE lower(name) LIKE '".strtolower($needle)."%'"
    ."ORDER BY name LIMIT 10"

это - мой SQL.

Вам нужно больше информации?

спасибо

6
задан Mridul Raj 10 December 2012 в 05:54
поделиться

1 ответ

DISTINCT

SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery
ORDER BY name LIMIT 10

Просто укажите, что нужно различать только имя , используя ваш запрос в качестве подзапроса.

Выполните ограничение и упорядочение во время отдельного, иначе отдельный может отбросить дубли и не отдать полные 10 строк в правильном отсортированном порядке.

5
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: