Как я могу использовать результат SQL-запроса в качестве столбца в другом запросе?

#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'