【问题标题】:SELECTING with multiple WHERE range conditions on same column在同一列上使用多个 WHERE 范围条件进行选择
【发布时间】:2013-03-30 21:29:11
【问题描述】:

我有这样的表格:

  A table                            B table
--------------------       -----------------------------------
item_ID | item_Name         item_ID | option_ID | option_Value 
--------------------       -----------------------------------
   1      item_a               2         34         2000
   2      item_b               2         45         3400
   3      item_c               2         12         1200  
   4      item_d               3         34         500
   5      item_e               3         13         500
   6      item_f               4         45         700

我写了一个查询来获取项目,例如有 option 34 = 2000option 12 = 1200 是:

SELECT A.item_ID, A.item_name
FROM A
LEFT JOIN B ON A.item_ID = B.item_ID
WHERE B.option_ID IN (34, 1200) AND
      B.option_Value IN (1200, 2000) AND
GROUP BY A.item_ID
HAVING COUNT(A.item_ID) >= 2 /* count of option used for search, can be more*/

我的问题是我想获得范围结果的某些选项,例如: option id 3410002000 之间选项 12 低于 4000

注意:(option_id, option_value) 对是唯一的,我想获得符合所有条件的项目

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    这个怎么样?

    SELECT A.item_ID, A.item_name
    FROM A
    LEFT JOIN B ON A.item_ID = B.item_ID
    WHERE (B.option_ID=34 AND B.option_value BETWEEN 1000 AND 2000)
          OR (B.option_ID=12 AND B.option_value BETWEEN 0 AND 4000)
    GROUP BY A.item_ID
    HAVING COUNT(A.item_ID) >= 2
    

    也许我没有完全理解这个问题?

    【讨论】:

    • 据我所知,这将确保您只获得两者(或全部 - 在一般情况下)匹配的项目。与多个内连接相比,使用左连接是一种更好的查询策略。
    • 谢谢,我现在明白逻辑了。马克的回答也是正确的,但我没有注意到。
    【解决方案2】:

    这应该会给你你想要的:

    WHERE
      B.option_ID = 34 AND B.option_Value BETWEEN 1000 AND 2000
      OR
      B.option_ID = 12 AND B.option_Value < 4000
    

    如果您要根据某些规则进行过滤,可能会有更好的方法来执行此操作...否则,只需使用 ORAND 来实现您想要的。

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2011-03-31
      • 2020-08-11
      相关资源
      最近更新 更多