2016-08-06 48 views
0

我在http://sqlfiddle.com/#!9/b6015c6/2我需要完美的MySQL查詢得到結果,因爲我想

我的表模式創建的SQL撥弄如下:

> assignedattributeid (TABLE) 
>  id INT(10) 
>  productid INT(10) 
>  attributeid INT(10) 
> 
> products (TABLE) 
>  id INT(10) 
>  productname VARCHAR(50) 

假設記錄爲下:

表:assignedattributeid

id productid attributeid 
1 5 10 
2 5 11 
3 6 11 
4 7 10 

表:產品

id productname 
5 P1000 
6 P2000 
7 P3000 

其實我想獲得所有這些產品,其中attributeid 10和11分配。

我使用此查詢:選擇不同的產品* FROM產品留下 上assignedattributeid.productid = products.id 加入assignedattributeid其中assignedattributeid.attributeid在(10,11)

但它確實不行。它顯示所有記錄。其實它應該只顯示P1000產品。

查詢中的任何建議?

+0

當然你會得到所有的條目,因爲(10,11)中的assignedattributeid.attributeid確實匹配所有條目。你爲什麼期望只選擇P1000產品? – arkascha

+0

@arkascha - 「**兩個**屬性10和11都被賦值」。 –

+0

其實我只需要那些屬性(即10和11)都必須分配的產品。如果任何一個匹配,那麼它不應該返回。在我的項目中,我創建了屬性ID的複選框。因此,如果用戶選擇任意多個複選框,那麼只有這些產品纔會顯示選中複選框的位置。在我的項目中,複選框的值將是10,11,這是我在給定的小提琴示例中使用的 – user3264863

回答

1

試試這個

select distinct products.productname as sid from products 
left join assignedattributeid on assignedattributeid.productid=products.id 
where assignedattributeid.attributeid in (10,11) 
group by sid having count(*) > 1 
+0

'DISTINCT' *和*'GROUP BY' !?? – MatBailie

+1

任何時候您在查詢中看到DISTINCT和GROUP BY,至少,鬧鐘應該開始響起。此外,'LEFT JOIN x ... WHERE x'否定外連接 – Strawberry

3

集團的產品,並添加HAVING條件,其對獨特attributeids - 它必須是2

select products.* from products 
join assignedattributeid on assignedattributeid.productid=products.id 
where assignedattributeid.attributeid in (10,11) 
group by products.id 
having count(distinct assignedattributeid.attributeid) = 2 

http://sqlfiddle.com/#!9/b6015c6/11

或每一次參加assignedattributeidattributeid

select distinct products.* from products 
join assignedattributeid a1 on a1.productid=products.id 
join assignedattributeid a2 on a2.productid=products.id 
where a1.attributeid = 10 
    and a2.attributeid = 11 

http://sqlfiddle.com/#!9/b6015c6/8

如果products.id是主鍵,assignedattributeid(productid, attributeid)是一個獨特的密鑰,你不需要DISCTINCT關鍵字。

+0

@MatBailie - 我添加了一個可用的sqlfiddle-demo - 只爲你:-) –

+0

我認爲在查詢中有問題,因爲沒有固定編號屬性id。您可以看到,我在http://sqlfiddle.com/#!9/3bb31/2的assignattributedid中添加了一條記錄。所以我嘗試用attributeid 10,11和12搜索記錄。然後它不起作用。 – user3264863

+0

@ user3264863 - 您還添加了一個永遠不會成爲真的條件,因爲'a2.attributeid'不能同時爲一行11和12。如果該數字不是固定的,則採取第一個查詢或爲每個數字添加聯接。 –

相關問題