在多行上发出select语句

时间:2017-09-10 15:06:11

标签: sql select db2

我使用DB2。

情况:我想对我的表RELATIONS进行查询,列出所有分配了RELATION 1和RELATION 2 OR 3的公司。在我的数据库设计中,1个或更多公司可以有多个关系。

我想在SQL的同一列(RELATION)上使用多个AND运算符执行select语句,但如果我执行代码,则不会有任何命中。

if( ($wp_query->current_post) % 7 == 0 ):

 Adsense Code Here

endif;

当我执行此操作时,我没有得到任何点击。

这是我的数据库设计。

***这是表格RELATION

SELECT R_ID, COMPANY_NAME from RELATION
WHERE COMPANY_GROUP = 2245
AND RELATION = 1
AND RELATION in (2,3)

***这是表公司

R_ID, RELATION, COMPANY_NAME
121   1            Inbev
122   6            Jupiler
123   1            Unox
124   2`           Unox
125   4            Lotus
126   1            Lu
127   1            Felix
128   2            Felix
129   1            Unicoresels
130   3            Unicoresels
131   4            Sporkamt

这是我想通过查询实现的结果。

COMPANY_ID, COMPANY_NAME, COMPANY_ADDRESS, COMPANY_GROUP
31          Jupiler       Some address     2245
32          Unox          Some address     2245
33          Lotus         Some address     2245
34          Lu            Some address     2245
35          Felix         Some address     2245
36          Unicoresels   Some address     2245
37          Sporkampt     Some address     2245

我该怎么做?

1 个答案:

答案 0 :(得分:1)

一种方法是使用group byhaving

SELECT COMPANY_NAME 
FROM RELATION
WHERE RELATION IN (1, 2, 3)
GROUP BY COMPANY_NAME
HAVING SUM(CASE WHEN RELATION = 1 THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN RELATION IN (2, 3) THEN 1 ELSE 0 END) > 0 ;

注意:

  • 如果您想按公司组进行过滤,则需要加入公司表。
  • 关系表应使用COMPANY_ID,而不是COMPANY_NAME

编辑:

如果您希望RELATION表中的行匹配,那么一个简单的方法是使用上面的子查询:

SELECT r.*
FROM RELATION r
WHERE r.COMPANY_NAME IN (SELECT r2.COMPANY_NAME 
                         FROM RELATION r2
                         WHERE r2.RELATION IN (1, 2, 3)
                         GROUP BY r2.COMPANY_NAME
                         HAVING SUM(CASE WHEN r2.RELATION = 1 THEN 1 ELSE 0 END) > 0 AND
                                SUM(CASE WHEN r2.RELATION IN (2, 3) THEN 1 ELSE 0 END) > 0
                        );