Как игнорировать столбец для выбора различных в postgresql? - PullRequest
6 голосов
/ 24 июня 2010

Привет всем!

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

"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.

Вам нужна дополнительная информация?

спасибо

1 Ответ

5 голосов
/ 24 июня 2010

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

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

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

...