2015-11-14 122 views
0

我有兩個表:MySQL的 - 返回唯一記錄

Table: products 
----------------------------------------------------- 
| id |  name    | other fields... 
----------------------------------------------------- 
| 20 |  Intel i5 4690K  | ... 
| 21 |  AMD A6-7400K  | ... 
| 23 |  AMD A8-3850  | ... 
| ... |  ...    | ... 

和表product_details:

Table: products_details 
----------------------------------------------- 
| id | product_id | option_id | value | 
----------------------------------------------- 
| 1 |  20  |  2478 | 55032 | 
| 2 |  20  |  2482 | 55051 | 
| 3 |  21  |  2478 | 54966 | 
| 4 |  21  |  2482 | 55050 | 
| 5 |  22  |  2478 | 55032 | 
| 5 |  22  |  2482 | 55050 | 
----------------------------------------------- 

2478 = Number of Cores 
2482 = Manufacturer 

55032 = 4 cores 
55050 = 6 cores 

我試圖讓這裏的產品只有4個內核的記錄,並從AMD:

Select 
    product_details.product_id, 
    products.name, 
    product_details.option_id, 
    product_details.value 
From 
    product_details Inner Join 
    products On product_details.product_id = products.id 
Where 
    product_details.option_id In (2478, 2482) And 
    product_details.value In (55032, 55050) 

SQL以上給我雙記錄

product_id name     option_id value 
20   Intel i5 4690K  2478  55032 
21   AMD A6-7400K   2482  55050 
23   AMD A8-3850K   2478  55032 
23   AMD A8-3850K   2482  55050 

很明顯,它不適用於IN。有任何想法嗎?

+1

那麼,什麼是你期望的輸出? – dotnetom

+0

在開始處加入「DISTINCT product_details.product_id」會更好嗎? –

+0

@dotnetom預期輸出是僅有4個核心且僅來自AMD的產品。在這種情況下,只有產品#23 – simke

回答

1

要獲得AMD4 CORES,此查詢工作正常。

您需要在product_details上進行兩次內連接以獲得manufacturer以及no of cores

這裏是SQLFiddle Demo

Select 
      product_details.product_id, 
      products.name, 
      product_details.option_id, 
      product_details.value 
     From 
      product_details 
      Inner Join 
      products On product_details.product_id = products.id AND product_details.option_id=2478 
      INNER JOIN product_details P2 ON P2.product_id = product_details.product_id AND P2.option_id=2482 
     Where 
      product_details.value = 55032 And 
      P2.value = 55050 

希望這有助於。

0

您寫的查詢選擇#cores選項的所有選項和所有值。你最好把它分解成一個嵌套的子查詢:

  1. 找到product_details記錄只指定所需選項的期望值。 (內部查詢)
  2. 查找products記錄,其id與上一步返回的記錄匹配。 (外部查詢。)
+0

試過,但沒有運氣。如果你可以發佈你的解決方案的例子,那就太好了。 – simke

+0

我必須睡上它。我剛剛在最初的假設中發現了一個錯誤。 –

0

首先,如果您只需要AMD製造商,那麼該值的選項在哪裏? 你說:

2478 = Number of Cores 
2482 = Manufacturer 
55032 = 4 cores 
55050 = 6 cores 

好,但如果是在option_id = 2482value? 你必須知道它們並將它們包含在Where子句中。

此外,我更喜歡使用Left Join而非INNER JOIN

+0

每個選項可以有多個值。每個產品可以有多個選項。產品詳細信息表格包含所有產品選項和值。 – simke

+0

對,我只想知道'2482 option_id'的可用選項在哪裏? 在製造商價值觀中,您必須擁有一些記錄,如'AMD','Intel'...等等 – wajeeh