2017-03-17 93 views
-2
product_options 
ID | Option 
1 | One 
2 | Two 
3 | Three 

product_to_options 
ID | Product | Option 
1 | 1  | 1 
2 | 2  | 2 
3 | 2  | 3 

從本質上講,我需要從product_options得到所有行,除了所提供,其中選擇都在同類產品中 的。其中連接表中選擇行具有相同的價值

例如:

傳遞的值爲1,將返回什麼。

傳遞的值爲2,將ID爲3

路過的3的值返回的選項,將與ID返回選項2

+1

誰是你的例子中的「價值」? ID,產品還是選項? –

+0

@JuanCarlosOropeza值將是選項 –

+0

是混亂,因爲你有兩個'選項'一個整數和一個字符串。你應該重命名第二個'Option_ID' –

回答

0

您可以加入一個表與自身,過濾左表中的值並返回右表中的值。

SELECT 
    pto2.Option 
FROM 
    product_to_options pto1 
    INNER JOIN product_to_options pto2 
    ON pto1.Product = pto2.Product 
    AND pto1.ID <> pto2.ID 
WHERE 
    pto1.option = @option; 

您應該注意,根據數據您可以獲得多個值。

Here's a working sample with minor syntax changes for sql server(你需要檢查文本僅-結果或通過點擊網格)

+0

如果我想獲得選項'1'和選項'2'的選項,我應該怎麼做? –

+0

@RyanHipkiss這是一個不同的問題。通常你使用一個IN和一個計數。請參閱http://stackoverflow.com/a/18860401/119477 –

1

我盡力用我的理解。

  • pto.Product = @option讓你得到所有的行匹配@option
  • pto.Option <> @option但過濾那些具有相同ID

SELECT po.* 
FROM product_options po 
JOIN (
     SELECT pto.Option 
     FROM product_to_options pto 
     WHERE pto.Product = @option 
     AND pto.Option <> @option 
    ) as filter 
    ON PO.ID = filter.Option 
+0

不知道爲什麼你在這裏使用內聯視圖,但至少它正確地篩選出具有相同ID的選項 –

+0

@ConradFrix不確定你的意思,但如果你看到一個更好的方式來編寫它可以自由地將其作爲第二種方式進行編輯。 –

相關問題