Есть ли в sqlite элегантный способ выделить один столбец при самостоятельном объединении? - PullRequest
0 голосов
/ 14 марта 2020
SELECT mindate.rID
FROM
    (SELECT rID, mID, count(mID), min(ratingDate), stars
    FROM rating
    GROUP BY rID, mID
    HAVING count(mID) >1) 
AS mindate,
    (SELECT rID, mID, count(mID), max(ratingDate), stars
    FROM rating
    GROUP BY rID, mID
    HAVING count(mID) >1) 
AS maxdate
WHERE mindate.stars > maxdate.stars

Это пример запроса, который не работает, потому что я могу выбрать только «mindate.rID» или «maxdate.rID», или он дает мне «неоднозначное имя столбца - ошибка», даже если событие может будь вход, который мне нужен. Единственный способ решить эту проблему - использовать SELECT *, но должен быть более элегантный способ ее решения, не так ли?

1 Ответ

1 голос
/ 14 марта 2020

Для SQLite вы можете выбрать оба столбца, если они определены по имени / псевдониму таблицы:

SELECT mindate.rID, maxdate.rID

Если вы столкнулись с такой проблемой, я подозреваю, что она не имеет ничего общего с SQLite, но с инструментом или язык программирования, который вы используете для выполнения этого запроса. В любом случае рекомендуется не иметь в результатах 2 столбца с одинаковыми именами, поэтому вы должны использовать их псевдонимы:

SELECT mindate.rID minID, maxdate.rID maxID

См. demo . Если вы хотите вернуть только один из 2 столбцов на основе некоторого условия, используйте выражение CASE:

SELECT CASE WHEN <condition> THEN mindate.rID ELSE maxdate.rID END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...