Mysql 从标准表中获取WHERE子句的条件

Mysql 从标准表中获取WHERE子句的条件,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我创建了以下简单的数据模型: 我在表格中填写了以下数据: 1表客户 2桌订单 表3标准 之后,我创建了一个查询,以根据criterias Country和OrderValue获取客户及其订单: 到目前为止,所有这些都很有效 但是,与SQL查询中WHERE子句中的标准不同,它们应该存储在一个名为criterias的单独表中。然后,查询应该从这个表中获取数据,并像现在在上面的查询中一样应用它们 要实现这一点,我需要在代码中做哪些更改?不一定是答案;评论太长了 一组有效的查询条件可能如下所示 WHE

我创建了以下简单的数据模型:

我在表格中填写了以下数据:

1表客户

2桌订单

表3标准

之后,我创建了一个查询,以根据criterias Country和OrderValue获取客户及其订单:

到目前为止,所有这些都很有效

但是,与SQL查询中WHERE子句中的标准不同,它们应该存储在一个名为criterias的单独表中。然后,查询应该从这个表中获取数据,并像现在在上面的查询中一样应用它们


要实现这一点,我需要在代码中做哪些更改?

不一定是答案;评论太长了

一组有效的查询条件可能如下所示

 WHERE (country = "US" AND OrderValue >= 150)
    OR (country = "DE" AND OrderValue >= 300)
    OR (country = "AU" AND OrderValue >= 200);
…事实上,尽管可能会更慢

WHERE (country,ordervalue) IN(('US',150),('DE',300),('AU',200));
您只需连接表或在where子句中使用子查询

后者更容易键入,因此:

WHERE EXISTS (SELECT 1
              FROM Criterias cr
              WHERE cr.Country = c.Country AND
                    cr.MinOrderValue <=  o.OrderValue
             )

根据上面的数据库模式,您必须创建一个字段customer表,它是主表,并将与表名顺序进行映射。在此之后,您需要在查询中使用Join和exists子句

select c.cutomerId, c.customerName, c.country, o.orderValue from customer c, order o where  c.customerId = o.customerId and 
        exists (select * from criteria cr where cr.country = c.country and o.order >= cr.MinimumOrderValue)

当涉及多个表时,最好的编程实践是限定所有列。例如,测试、订单、国家?提示2:表格别名!为什么有些栏目得到了适当的限定,而另一些栏目没有——似乎有点随机。
 WHERE (country = "US" AND OrderValue >= 150)
    OR (country = "DE" AND OrderValue >= 300)
    OR (country = "AU" AND OrderValue >= 200);
WHERE (country,ordervalue) IN(('US',150),('DE',300),('AU',200));
WHERE EXISTS (SELECT 1
              FROM Criterias cr
              WHERE cr.Country = c.Country AND
                    cr.MinOrderValue <=  o.OrderValue
             )
select c.cutomerId, c.customerName, c.country, o.orderValue from customer c, order o where  c.customerId = o.customerId and 
        exists (select * from criteria cr where cr.country = c.country and o.order >= cr.MinimumOrderValue)