В приложении 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-оператор терпит неудачу.