以下是可能的吗?
SELECT f.*, (SELECT QUERY WHICH PULLS OUT A STRING VALUE) AS record_type
FROM foo f
AND f.record_type > 0
本质上我想查询一个动态列。我还尝试了以下我都没有运气的方法:
SELECT f.*
FROM foo f
AND f.(SELECT QUERY WHICH PULLS OUT A STRING VALUE) > 0
这在 mysql 中甚至可能吗?
最佳答案
目前还不完全清楚我们正在尝试做什么。
是的,我们可以在 SELECT 列表中包含一个子查询。 (限制是子查询必须返回一个单列,并且返回不超过一行)。这将是一个返回的值。
返回的值不会被解释为对外部查询中列的引用。
我们可以在 HAVING
中引用子查询返回的值子句,例如
SELECT f.id
, ( SELECT t.fee FROM t WHERE t.fi = 'fo' LIMIT 1 ) AS fum
FROM f
HAVING fum > 0
请注意,我们不能引用 fum
在查询的 WHERE 子句中。
另请注意,我们没有资格 fum
与 f.
因为fum
不是 f
中的列.
我们可以使查询成为一个内联 View ,然后外部查询可以引用 fum
在WHERE
条款。
但就效率而言,所有这些都不太理想。查询将访问 f
中的每一行 , 以及 HAVING
中的条件访问所有行后,稍后应用子句。
同样...子查询返回的值是在结果集中返回的值;这不会被解释为对 f 中列的引用。
除非是相关子查询,否则子查询将为 f
中的每一行返回相同的值,所以它本质上是一个字面值。
如果这是一个相关的子查询(包括对外部查询中 f
列的引用),那么可能是一个 JOIN
操作将更好地满足规范。
同样,我们想要实现的目标并不完全清楚。
如果目标是对列的动态 引用,那么不,这不能在单个 SQL 语句中实现。
要使用 SQL 动态生成列引用,需要一个单独的 SQL 语句,然后可以使用该语句的结果生成我们要运行的 SQL 语句。
另一种方法是制作一个包含对多个列的静态引用的表达式,包括表达式中的逻辑,用于确定应该从哪些静态列引用中返回值。
关于mysql - 查询动态 mysql 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880181/