2011-01-23 91 views
0

如何选择具有精确子对象标识的行?例如,我需要只挑选有subcat_id 2,6或2,4,5,7的行。Mysql复杂选择

CREATE TABLE IF NOT EXISTS `testing123` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `cat_id` int(10) DEFAULT '0', 
    `subcat_id` int(10) DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=223 DEFAULT CHARSET=utf8; 

REPLACE INTO `testing123` (`id`, `cat_id`, `subcat_id`) VALUES 
    (170, 32, 5), 
    (171, 33, 1), 
    (172, 33, 7), 
    (173, 34, 5), 
    (175, 35, 2), 
    (176, 36, 1), 
    (177, 36, 2), 
    (178, 36, 7), 
    (179, 37, 2), 
    (180, 37, 6), 
    (184, 40, 2), 
    (185, 40, 5), 
    (186, 40, 6), 
    (187, 41, 4), 
    (188, 54, 2), 
    (189, 54, 4), 
    (190, 54, 5), 
    (191, 54, 7), 
    (192, 55, 6), 
    (193, 56, 2), 
    (194, 56, 6), 
    (195, 57, 6), 
    (196, 58, 1), 
    (197, 59, 3), 
    (198, 60, 6), 
    (199, 61, 2), 
    (200, 61, 6), 
    (203, 63, 1), 
    (204, 63, 6), 
    (205, 64, 2), 
    (206, 64, 6), 
    (207, 65, 1), 
    (208, 65, 2), 
    (209, 66, 4), 
    (214, 67, 1), 
    (215, 67, 5), 
    (220, 70, 1), 
    (221, 70, 4), 
    (222, 70, 5); 

如果我使用或OR(),它的采摘所有的行,即有任何一个提供subcats,但我需要只有完全匹配。

为实验提供的表格示例。

帮助! :)

+0

中列举了你能解释一下你的已经subcat_id 2,6或2,4,5,7是什么意思? subcat_id只是一个整数,所以没有一行会有一个由两个或更多个组成的subcat_id。 – Arkaaito 2011-01-23 09:58:07

+0

真的吗?请看下面的答案。 :) – Somebody 2011-01-23 10:14:14

回答

2
SELECT * 
    FROM testing123 
WHERE cat_id IN (SELECT cat_id 
        FROM testing123 
        WHERE subcat_id IN (2, 6) 
       GROUP BY cat_id 
        HAVING COUNT(*) = 2) 


SELECT * 
    FROM testing123 
WHERE cat_id IN (SELECT cat_id 
        FROM testing123 
        WHERE subcat_id IN (2, 4, 5, 7) 
       GROUP BY cat_id 
        HAVING COUNT(*) = 4) 

注意COUNT(*) = N条款取决于有多少subcats在IN()