2011-10-11 91 views
2

问题:我试图将以下内容优化为一个查询。MySQL检查两个条件是否至少返回一个结果

预期结果:如果两个查询都返回至少1行,则输出True或1.如果只有一个查询返回结果,则输出false或0.任何帮助表示赞赏!

SELECT item_id 
FROM `category_item` 
WHERE `category_id` =39610 AND `item_id` = 31 

SELECT item_id 
FROM `category_item` 
WHERE `category_id` =37 AND `item_id` = 31 

回答

4
SELECT COUNT(DISTINCT `category_id`) 
FROM `category_item` 
WHERE `category_id` IN (39610,37) AND `item_id` = 31 

您可以添加== 2或> 1为此事

编辑: 只是为了澄清:

SELECT (COUNT(DISTINCT `category_id`) > 1) AS both_have 

将导致返回1或0

+0

+1精美的作品:http://www.sqlize.com/a2z8P5T9jx – mellamokb

2

检查行的最简单方法是使用exists子句,我们可以将两个查询与and,以确保两个查询返回行:

select 
    exists (SELECT item_id 
     FROM `category_item` 
     WHERE `category_id` =39610 AND `item_id` = 31 
    ) AND 
    exists (SELECT item_id 
     FROM `category_item` 
     WHERE `category_id` =37 AND `item_id` = 31 
    ) as `both_exist`; 

演示:http://www.sqlize.com/cx00raoMa7

+0

伟大的答案!很难挑选一个! +1 – Fostah

+0

这个解决方案解决了我的特殊问题,不能说为什么首先没有 – zzapper

相关问题