2012-01-22 21 views
0

我一直在寻找解决方案(书籍,互联网等)并且找不到任何东西的时间已经过去了。这里是我的问题:将子查询限制在同一行中的2个参数

我得到了一个项目的表格标签的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之间的交叉比较)。

回答

1

使用和运营商ON子句JOIN:

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

试试这个:

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

使用该公式在wherejoin

1

无看到其余的结构具体,我会给它一个像...

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

如果这不是,它可能需要d从每个你想要实际获得的表格中获取一些样本数据。

+0

非常感谢你为你的闪电般的速度帮助,无论是。两者都值得绿色验证,但不能这样做不幸,所以我给了那些得到较少代表的人。点;-)。再次感谢! – Alex