如何在另一个查询中将SQL查询结果用作列?

时间:2019-03-03 21:49:33

标签: 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'

任何答案都将非常有帮助! 对不起,我的英语不好

3 个答案:

答案 0 :(得分:0)

  

结果将成为WHERE子句中的一列

如果是这种情况(您想比较一列),则该列应属于同一查询。

SELECT
    *
FROM dvtv_delivery
WHERE
    day = 'Y'

答案 1 :(得分:0)

假设子查询恰好返回一行,则将执行您所写的查询:

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'

答案 2 :(得分:0)

此查询:

SELECT day FROM dvtv_weekday

返回类似'SUN'的字符串,而不返回列SUN的名称。
所以WHERE等效于:

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