PostgreSQL: как ВЫ ВЫБИРАЕТЕ ОТЛИЧИТЕЛЬНЫЕ отношения и порядок по различным полям в зависимости от предложения WHERE? - PullRequest
2 голосов
/ 09 июля 2011

Каждая учетная запись связана с одним человеком и одним типом учетной записи.Я хочу выбрать отдельное подмножество учетных записей.Для выбора учетные записи должны соответствовать как минимум одному из двух критериев.Если учетная запись встречается дважды

Я хочу заказать этот набор результатов на основе двух разных полей.Это была моя попытка:

Select DISTINCT a.*
FROM people AS p
JOIN accounts AS a
ON a.people_id = p.id
JOIN type_account AS t
ON t.type_id = a.id
WHERE t.id IN(1,3,5)
OR p.id IN(2,4,6)
ORDER BY(CASE
         WHEN p.id IN(2,4,6) THEN p.updated_at
         WHEN t.id IN(1,3,5) THEN p.created_at) AS position

И я получил эту ошибку: SELECT DISTINCT, ORDER BY expressions must appear in select list

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

У меня возникли проблемы, когда я оборачиваюсь вокруг этого.Любая помощь будет оценена :)

1 Ответ

6 голосов
/ 09 июля 2011

Переместите свои операторы CASE в предложение SELECT, затем упорядочите их положение:

SELECT
    CASE
        WHEN p.id IN(2,4,6) THEN p.updated_at
        WHEN t.id IN(1,3,5) THEN p.created_at
    END AS position,
    DISTINCT a.*
FROM people AS p
JOIN accounts AS a
ON a.people_id = p.id
JOIN type_account AS t
ON t.type_id = a.id
WHERE t.id IN(1,3,5)
OR p.id IN(2,4,6)
ORDER BY 1 DESC
LIMIT 1;
...