#mysql #sql #select
#mysql #sql #выберите
Вопрос:
Итак, на самом деле два вопроса:
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A** AND
DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = **B**)
- Почему этот запрос выдает мне
код ошибки: 1054. Неизвестный столбец ‘CurrercyID’ в ‘списке полей’ - Как я могу использовать результат первого оператора SELECT A в B
Комментарии:
1. Есть ли в таблице
currency_rate
CurrencyID
столбец?2. Вы скопировали / вставили это сообщение об ошибке? Если это так, вы где-то неправильно написали столбец, поскольку ошибка вызывает его
CurrercyID
. Обратите внимание на ‘r’, где ‘n’ должно быть3. @Jonny: используйте псевдонимы таблиц, а затем перед каждым идентификатором валюты укажите псевдоним, чтобы явно определить, из какой таблицы
4. да, я этого не заметил, но дело в том, что я скопировал запрос, который, похоже, в порядке
Ответ №1:
Надеюсь, в вашей currency_rate
таблице есть столбец с уникальным идентификатором.
Если это произойдет, вы можете объединить запросы A и B в один запрос в предложении WHERE …
SELECT
CurrencyRateID, Rate, Markup
FROM
currency_rate
WHERE
uniqueID = (
SELECT uniqueID
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
ORDER BY DateTime DESC LIMIT 1
)
Если нет, вам, возможно, придется просто повторить…
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
AND DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1))
Примечание: Даже если код повторяется, вполне вероятно, что MySQL заметит повторение и выполнит запрос только один раз.
Редактировать:
Я только что заметил, что вы могли бы упростить первый вариант, просто используя вложенный запрос…
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate
WHERE CurrencyID = (SELECT CurrencyID FROM currency WHERE BaseCurr = 1)
ORDER BY DateTime DESC LIMIT 1
Ответ №2:
Проверьте, существует ли столбец CurrencyID в таблице валют, и измените запрос таким образом, чтобы вы могли использовать оператор A в предложении where.
SELECT CurrencyRateID, Rate, Markup
FROM currency_rate cr inner join
(SELECT CurrencyID FROM currency WHERE BaseCurr = 1) **A**
ON cr.CurrencyID = a.CurrencyID
WHERE cr.DateTime = (SELECT MAX(DateTime)
FROM currency_rate
WHERE CurrencyID = A.CurrencyID)