如何确定MySQL查询的正确逻辑

时间:2017-04-27 15:18:59

标签: mysql sql

我有一个为我生成销售报告的模块,它有多个筛选数据的选项。对此的基本查询是

SELECT DISTINCT o.orders_id from orders o 
WHERE o.date_purchased >= '2017-01-01 00:00:00'
AND o.date_purchased < '2017-04-28 00:00:00';

如果我只想在英国境内搜索销售,则会添加

AND FIND_IN_SET (o.customers_country, 'United Kingdom')

我希望能够按自定义ID进行过滤,以便生成仅查看特定产品的报告。该ID存储在

products_with_attributes_stock.customid

我已经包含了一个表列表,其中包含交叉引用收集customid所需的数据。见下文:

Tables and column relationship

我可以做几个查询并使用一个查询的结果来过滤下一个的结果,直到我得到自定义项,但这看起来相当笨重。

我认为可以使用INNER JOIN来完成,但说实话,我对如何连接所有表并将列匹配在一起感到困惑。

任何帮助理解如何实现这一点都将受到赞赏,因为我需要为其他过滤选项做更多相同的事情。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我写的最终查询是:

SELECT DISTINCT o.orders_id from orders o
LEFT JOIN orders_products op ON o.orders_id = op.orders_id
LEFT JOIN orders_products_attributes opa ON o.orders_id = opa.orders_id
AND op.orders_products_id = opa.orders_products_id
LEFT JOIN products_attributes pa ON opa.products_options_id = pa.options_id
AND opa.products_options_values_id = pa.options_values_id
LEFT JOIN products_with_attributes_stock pas ON op.products_id = pas.products_id
AND pa.products_attributes_id = pas.stock_attributes
WHERE customid = '00038-16-00008'
AND o.date_purchased >= '2017-04-25 00:00:00' AND o.date_purchased < '2017-04-26 00:00:00' 
ORDER BY o.orders_id DESC