Почему конкретное значение сравнения заставляет этот SQL-запрос возвращать неоднозначную ошибку столбца, а другие нет? - PullRequest
0 голосов
/ 17 апреля 2019

В приложении node.js / Electron / sqlite3 следующий запрос корректно возвращается для всех состояний, кроме 'ID'.

Я нашел ответ, но все решения, которые я нашелпредназначены для запросов, которые не выполняются полностью.

Запрос:

let stmt_data = 'SELECT DOMAIN, avg(SCORE) from( \
        SELECT Domains.DOMAIN, Indicators.INDICATOR, avg(MetricScores.SCORE) as SCORE \
        FROM MetricScores \
        INNER JOIN Counties ON MetricScores.FIPS == Counties.FIPS \
        INNER JOIN MetricVariables ON MetricScores.METRIC_VAR_ID == MetricVariables.ID \
        INNER JOIN MetricGroups ON MetricVariables.METRIC_GROUP_ID == MetricGroups.ID \
        INNER JOIN Domains ON MetricVariables.DOMAIN_ID == Domains.ID \
        INNER JOIN Indicators ON MetricVariables.INDICATOR_ID == Indicators.ID \
        WHERE Counties.COUNTY_NAME == "' + comp_location['COUNTY_NAME'] + '" AND Counties.STATE_CODE == "' + comp_location['STATE_CODE'] + '" AND METRIC_GROUP == "HWBI" \
        Group By Domains.DOMAIN, Indicators.INDICATOR) Group By DOMAIN';

Значение 'ID' в запросе @ comp_location['STATE_CODE'] приводит к следующей ошибке:

SQLITE_ERROR: ambiguous column name: ID

Я понимаю, что это проблема столбцов, имена которых совпадают с этим значением.Я не понимаю, почему изменение значения сравнения может нарушить этот запрос.

Я нашел решение / обходной путь:

изменение

WHERE Counties.COUNTY_NAME == "' + comp_location['COUNTY_NAME'] + '" AND Counties.STATE_CODE == "' + comp_location['STATE_CODE'] + '" AND METRIC_GROUP == "HWBI"

до

WHERE Counties.COUNTY_NAME == ? AND Counties.STATE_CODE == ? AND METRIC_GROUP == "HWBI"

и передача переменных в

db.all(sql, [county, state], (err, rows) => {...});

обеспечивает ожидаемое поведение, но я все еще заинтересован впочему первоначальный SQL-оператор терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...