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