2013-03-23 52 views
-1

嗯,我试图让一个地方在同一列多次条款,即:MySQL - 如何使同一列上的where子句多于1?

product 
---------------------------------------- 
| product_id | product_name | group_id | 
---------------------------------------- 

    group 
------------------------- 
| group_id | group_name | 
------------------------- 

    group_val 
------------------------- 
| group_id | product_id | 
------------------------- 


select b.product_name 
from group_val a 
inner join product b using(product_id) 
inner join group c using(group_id) 
where a.group_id in(10,15,88) 
group by b.product_id; 

它一样or ... or,但我需要做的是这样的:它只是将返回的产品,是对组10和组15和88组:我的意思是产品需要在这三组中。

即:

group_val 
------------------------- 
| group_id | product_id | 
------------------------- 
| 10  | 1   | 
------------------------- 
| 15  | 1   | 
------------------------- 
| 88  | 1   | 
------------------------- 
| 15  | 2   | 
------------------------- 
| 10  | 2   | 
------------------------- 

在这种情况下,它只会返回产品1

我该怎么办呢?

+1

[你有什么尝试?](http://www.whathaveyoutried.com/)请参阅[问问建议](http://stackoverflow.com/questions/ask-advice)。 – 2013-03-23 21:23:02

+0

使用SQL保留字作为表名或列名(在你的案例中* group *)是一个坏主意。 – grahamj42 2013-03-23 21:29:42

+0

这只是一个例子; p – 2013-03-23 21:30:42

回答

0

只需用例如查询工作,并假设你明确地知道,编程或以其他方式,这group_id您需要匹配以及有多少:

select `product_name`, count(gv.`product_id`) as cnt 
from `product` p 
left join `group_val` gv 
on p.`product_id` = gv.`product_id` 
where gv.`group_id` in (10, 15, 88) 
group by p.`product_id` 
having cnt = 3; 

将选择所有product_id s在group_val即在所有这些组中。

+0

它的工作,但我需要使用不同的计数(独特(gv.product_id)),谢谢; p – 2013-03-23 22:37:36

+0

@ultranaut我认为你的方法比我的更好,但它可以改善,看到这[[小提琴](http:///sqlfiddle.com/#!2/58b1d9/4) – grahamj42 2013-03-23 22:38:05

+0

group_id不应该在产品表上,我写错了; p – 2013-03-23 22:39:15

0

你并不需要在表产品领域GROUP_ID

SELECT p.product_name 
    FROM product AS p 
    INNER JOIN group_val AS g1 ON p.product_id = g1.product_id 
    INNER JOIN group_val AS g2 ON p.product_id = g2.product_id 
    INNER JOIN group_val AS g3 ON p.product_id = g3.product_id 
    WHERE g1.group_id = 10 AND g2.group_id = 15 AND g3.group_id=88; 

尝试在SQL Fiddle