admin

使用动态WHERE语句创建SQL查询

sql

我会使用Postgresql作为数据库,以防万一,尽管我想找到一种纯SQL方法而不是特定于Postgresql的实现。

我有大量的制造电子产品所获得的测试数据,我想从测试过程中获取满足一定条件的设备中提取数据,最好使用单独的表格,其中包含每个设备的测试条件制造步骤。

举一个简单的例子,假设我在两个不同的测试步骤中检查了设备的温度回读。在步骤1中,温度应在20C-30C的范围内,而步骤2在50C-60C的范围内。

假设下面的表结构带有一组示例数据(表名“ test_data”):

temperature   step   serial_number
    25          1        1
    55          2        1
    19          1        2
    20          2        2

并假设下表包含上述通过条件(表名称“ criteria”):

temperature_upper   temperature_lower   step
        20                 30              1
        50                 60              2

目前,使用静态方法,我只能使用以下查询:

    SELECT * FROM test_data  WHERE       
  ( test_data.step = 1 AND test_data.temperature > 20 AND test_data.temperature < 30 ) OR   
  ( test_data.step = 2 AND test_data.temperature > 50 AND test_data.temperature < 60 );

这将有效地产生下表:

temperature   step   serial_number
    25          1        1
    55          2        1

我想使选择查询更具动态性,而不是开始静态定义,而是使其从test_criteria表的结果列表中构造自身。希望将其扩展为一个复杂的查询,例如在步骤1中可以检查温度,电压和电流,而在步骤2中仅可以检查电流。

感谢您的任何见解!


阅读 42

收藏
2021-06-07

共1个答案

admin

您可以使用表之间的联接来解决

SELECT t.*
FROM test_data  t
INNER JOIN criteria c ON t.step =  c.step 
  AND t.temperature > c.temperature_upper 
      AND t.temperature < c.temperature_lower

或者,如果您想要> =和<=

SELECT t.*
FROM test_data  t
INNER JOIN criteria c ON t.step =  c.step 
  AND t.temperature netween c.temperature_upper AND  c.temperature_lower
2021-06-07