将子查询限制为同一行中的2个参数

时间:2012-01-22 03:28:17

标签: mysql sql database

我一直在寻找解决方案(书籍,互联网等)并且找不到任何东西。这是我的问题:

我得到了一个由2个标准标记的项目表:让我们将它们命名为crit1和crit2。对于我可以用于crit1和crit2的每个项目,以下int示例值(criteria1,criteria2):( 1,5)(5,2)(4,7)(8,6)等。

在另一个表中,我存储了订阅了按上述标准过滤的部分项目的用户。假设user_id 1订阅了以下项目类型(criteria1,criteria2):( 1,5)(2,7)。当我查询以获取用户1订阅的项目时,我得到标记为(1,5)(2,7)但是(1,7)或(2,5)的项目。 SQL Select查询正在进行每行之间的交叉比较。

通常,我想知道如何创建一个从同一行中的多个字段中过滤的查询(不允许跨行)。

我尝试使用JOINS对问题进行排序,但我无法在同一个JOIN中链接criteria1和criteria2。我必须使用2个JOINS并使它们独立(并且将发生criteria1和criteria2之间的交叉比较。)

3 个答案:

答案 0 :(得分:1)

没有具体看到结构的其余部分,我会给它一个像......一样的镜头。

select
      i.itemid,
      i.itemDescription,
      s.subscriberName
   from
      items i
         join Subscribers s
            on i.category1 = s.category1
           AND i.category2 = s.category2

如果不是这样,您可能需要从每个相应的表格中转储一些您想要实际获得的样本数据。

答案 1 :(得分:1)

在JOIN的ON子句中使用AND运算符:

SELECT i.* FROM subscriptions s
JOIN items i
ON i.crit1 = s.crit1 AND i.crit2 = s.crit2
WHERE s.user_id = 1

答案 2 :(得分:0)

试试这个:

将暴击1乘以1000(或其他一些数字 - 取决于数字的大小)并添加到它Crit2

wherejoin

中使用该公式