#mysql #sql
#mysql #sql
Вопрос:
Я получил представление, которое возвращает день недели. Результатом будет столбец в предложении WHERE, что-то вроде этого:
SELECT * FROM dvtv_delivery WHERE (SELECT day FROM dvtv_weekday) = 'Y'
Например:
Сегодня воскресенье, в dvtv_weekday возвращается SUN, В dvtv_delivery существует столбец SUN
Возможно ли это в Mysql? При запуске ничего не отображается
Использование, которое я использую ниже, работает
SELECT * FROM dvtv_delivery WHERE SUN = 'Y'
Любой ответ действительно был бы полезен!
Извините за мой плохой английский
Комментарии:
1. Вы пробовали это?
2. Ваш запрос должен успешно выполняться, хотя он может не выполнять то, что вы действительно хотите.
3. Вам нужен столбец в
dvtv_delivery
таблице, чтобы иметь связь сdvtv_weekday
таблицей.
Ответ №1:
Этот запрос:
SELECT day FROM dvtv_weekday
возвращает строку типа 'SUN'
, а не имя столбца SUN
.
Итак, ГДЕ эквивалентно:
WHERE 'SUN' = 'Y'
который всегда не возвращает строк.
Вам нужно что-то вроде этого:
SELECT * FROM dvtv_delivery
WHERE
CASE (SELECT day FROM dvtv_weekday)
WHEN 'SUN' THEN SUN
WHEN 'MON' THEN MON
WHEN 'TUE' THEN TUE
WHEN 'WED' THEN WED
WHEN 'THU' THEN THU
WHEN 'FRI' THEN FRI
WHEN 'SAT' THEN SAT
END = 'Y'
Я предполагаю, что в таблице dvtv_delivery
есть все эти столбцы: SUN, MON, ....
Ответ №2:
Результатом будет столбец в предложении WHERE
Если это так (вы хотите сравнить столбец), этот столбец должен быть частью того же запроса.
SELECT
*
FROM dvtv_delivery
WHERE
day = 'Y'
Ответ №3:
Ваш запрос, как написано, будет выполнен, предполагая, что подзапрос возвращает ровно одну строку:
SELECT *
FROM dvtv_delivery
WHERE (SELECT day FROM dvtv_weekday) = 'Y'
Такой запрос является скалярным подзапросом. Он должен возвращать один столбец и не более одной строки (в большинстве случаев).
Часто такие подзапросы коррелируют с внешним запросом. Это означает, что WHERE
предложение соединяет значения в двух таблицах. Неясно, как будет выглядеть предложение корреляции в этом случае, но структура запроса такова:
SELECT d.*
FROM dvtv_delivery d
WHERE (SELECT wd.day
FROM dvtv_weekday wd
WHERE wd.? = d.? -- maybe these would be date columns?
) = 'Y'