在 WHERE 子句中使用 SQL 查询中的列值?

问题描述 投票:0回答:4

在mySQL中,是否可以在SQL条件中使用列值,即。 WHERE 子句?

mySQL 表

|id|name  |valid_from         |valid_to|active|language|color|sub_condition|
|1 |test 1|2019-03-01 05:20:15|null    |1     |en      |red  |language='en'|
|2 |test 2|2019-03-01 05:20:15|null    |1     |de      |blue |color='blue' |

查询

SELECT *
FROM `table`
WHERE active = 1 AND
      valid_from <= NOW() AND
      sub_condition

sub_condition 应该是表中的值。

我想在选定的行中定义更详细的条件。

sql mysql select where-clause
4个回答
1
投票

我想你问的是:

我可以在 SQL 中执行类似 eval() 的操作来计算存储在数据中的表达式吗?

不,你不能。在准备查询之前,所有查询的语法(如表达式、表名和列名)都必须是明确且固定的。查询在执行期间读取的数据值无法更改查询的逻辑。

您可以读取数据,然后根据您的应用程序解释该数据的方式,使用该逻辑运行第二 SQL 查询。但您不能让一个查询在同一个查询期间既读取数据又执行逻辑。


0
投票

你必须使用别名。

SELECT * FROM table t WHERE t.active=1 AND t.valid_from <= NOW() AND (select * from table where (sub_condition))

以及子条件。


0
投票

是的,这是可能的。
但这取决于您要寻找什么。

例如,您可以

LIKE

单引号可以用反斜杠转义。

SELECT * FROM `table` 
WHERE active=1 
  AND valid_from <= NOW()
  AND sub_condition LIKE '%language=\'en\'%'

0
投票

不能使用列值作为 AND 条件来过滤结果,但可以使用列名作为 AND 条件来过滤结果。

SQL 查询会将 sub_condition 列名称中的 language='en' 视为列值,否则不考虑。

过滤结果的适当方法是这样的

示例;

$results = mysql_query("SELECT * FROM

table
WHERE active=1 AND valid_from <= NOW() AND lang='eng'");

© www.soinside.com 2019 - 2024. All rights reserved.