我使用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
我该怎么做?
答案 0 :(得分:1)
一种方法是使用group by
和having
:
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
);