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

Я получил представление, которое возвращает день недели.Результатом будет столбец в предложении 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'

Любой ответ будет действительно полезным!Извините, мой плохой английский

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Ваш запрос, как написано, будет выполнен, предполагая, что подзапрос возвращает ровно одну строку:

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'
0 голосов
/ 04 марта 2019

Этот запрос:

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, ....

0 голосов
/ 04 марта 2019

Результатом будет столбец в предложении WHERE

Если это так (вы хотите сравнить столбец), этот столбец должен быть частью того же запроса.

SELECT
    *
FROM dvtv_delivery
WHERE
    day = 'Y'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...