【发布时间】:2015-04-28 16:01:59
【问题描述】:
SELECT *
FROM orders
WHERE date_ord >= '2015-02-16'
AND date_ord <= '2015-02-26'
AND active =1
AND (
(
ship_city = 'NYC'
OR ship_city = 'New York'
OR ship_city = 'New York City'
)
AND ship_state = 'NY'
)
OR (
(
bill_city = 'NYC'
OR bill_city = 'New York'
OR bill_city = 'New York City'
)
AND ship_state = ''
)
ORDER BY ordId
客户在“NYC”、“New York”和“New York City”等 3 种变体中添加了“New York”城市名称。我需要查询账单城市为所有 3 个变体且运输状态为空或 NULL 的所有记录,以及使用城市名称的所有 3 个变体且运输状态设置为“NY”的运输城市为纽约的记录。简而言之,所有运往纽约市的订单。 (计费状态可以是 CA 或 FL)
这个查询并不完美。我收到的记录早于日期范围。请建议解决此问题。
正如@Ash 和@DovesandChicks 所建议的那样,我尝试使用 IN 函数来做到这一点
SELECT *
FROM orders
WHERE date_ord >= '2015-02-16'
AND date_ord <= '2015-02-26'
AND active =1
AND ship_city
IN ('NYC', 'New York', 'New York City')
OR (bill_city IN ('NYC', 'New York', 'New York City') AND ship_state = 'Unlisted')
ORDER BY ordId
查询还是有问题。请帮忙
【问题讨论】:
-
这就是为什么您应该在您的订单表中使用 cityid 而不是城市名称的原因。 (以及表格中的约束,以避免这种混乱......)
-
你有多余的括号。另外,我建议您将 ship_city 中的多个 'OR' 替换为 'IN' 子句。您也只是查询具有“date_ord = '2015-02-16'”的记录,因此不需要 >= 和
-
见下面我的 cmets,问题是你有一个没有括号的 OR 子句