mysql - 从同一个表列中选择多个范围

时间:2014-01-15 20:11:04

标签: mysql sql range between

我正在尝试选择在一系列类别中找到的产品,并且产品是在过去4个月内创建的。我用这个

完成了这个
select DISTINCT category_skus.sku, products.created_date from category_skus 
LEFT JOIN    products on category_skus.sku = products.sku 
WHERE category_code > ‘70699’ and category_code < ‘70791’ 
and products.created_date > “2013-09-13”;

结果如下:

+------------+------------+
|sku         |created_date|
+------------+------------+
|511-696004PU|2014-01-07  |
+------------+------------+
|291-280     |2013-12-04  |
+------------+------------+
|89-80       |2013-10-07  |
+------------+------------+
|490-1137    |2013-11-21  |
+------------+------------+

但是我需要在category_code表中选择多个范围。我还需要搜索'60130'和'60420'(这不是一个范围,而是与第一类别相关的其他单个类别),而不是仅仅搜索'70699'到'70791'。这是我上次尝试但是得到“空集(0.00秒):

select DISTINCT category_skus.sku, products.created_date from category_skus 
LEFT JOIN products on category_skus.sku = products.sku 
WHERE (category_code BETWEEN ‘70699’ and ‘70791’) 
and WHERE category_code = ‘60130’ and products.created_date > “2013-09-13”;

我在这里做错了什么???我希望我能够清楚地解释它并感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

你的条件有点混乱。 70699-70791之间也不会有任何产品= 60130。尝试在您自己的AND语句中嵌套category_code条件:

SELECT DISTINCT category_skus.sku, products.created_date
FROM category_skus 
LEFT JOIN products ON category_skus.sku = products.sku 
WHERE products.created_date > '2013-09-13'
AND (
   category_code BETWEEN '70699' AND '70791'
OR category_code = '60130'
)

答案 1 :(得分:0)

有很多方法可以做到这一点。您可以尝试一个简单的查询: -

select x.* from (
select DISTINCT category_skus.sku, products.created_date from category_skus 
LEFT JOIN products on category_skus.sku = products.sku 
WHERE category_code BETWEEN '70699' and '70791' 

union all

select DISTINCT category_skus.sku, products.created_date from category_skus 
LEFT JOIN products on category_skus.sku = products.sku 
WHERE category_code = '60130' or catagory_code='60420'

)x where x.created_date > "2013-09-13"

OR

select DISTINCT s.sku, p.created_date from category_skus s 
LEFT JOIN products p on s.sku = p.sku 
WHERE s.category_code BETWEEN '70699' and '70791' or (s.catagory_code='60130' or s.catagory_code='60420') and 
p.created_date > "2013-09-13"

希望它会对你有所帮助。

答案 2 :(得分:0)

where category_code in (select category_code from category_skus where (category_code       between '70699' and '70791') or (category_code in ('60130','60420')))
and products.created_date > ...

工作?不确定我是否正确理解了这个问题。

相关问题