2014-01-29 106 views
-2

我想根據單個記錄的值從單個表中獲取一些記錄;mysql根據另一個字段的值選擇記錄

這裏是我replaces表顯示了一些測試記錄

+-----------+------------+--------+-------+ 
| ProductID | order | replacement | group | 
+-----------+------------+--------+-------+ 
| 1  | 30 |  35  | 1 | 
| 1  | 30 |  40  | 1 | 
| 1  | 35 |  30  | 1 | 
| 1  | 35 |  40  | 1 | 
| 1  | 40 |  30  | 1 | 
| 1  | 40 |  35  | 1 | 
+-----------+------------+--------+-------+ 

UNIQUE KEY indexProductID(10),orderreplacement

我想的是,如果我目前的工作訂單#30我想知道35或40可以用作替代品。在看過這裏的另一個答案之後,這就是我所認識的;

SELECT replacement FROM replaces r1 WHERE `ProductID` = '1' AND r1.group = (SELECT group FROM replaces r2 WHERE order.r1 = 30) 

我嘗試過移動東西並以不同的方式引用字段,但我總是得到語法錯誤。

+0

什麼是取代r1並取代r2 .....不只是一個表? – zee

+1

表名爲'replacement'還是'replaces'?表中的「組」列在哪裏? – Barmar

+0

是的,聲明和表沒有在COMMON大聲笑 – zee

回答

0

=只能用於與單個值進行比較。如果子查詢可以返回多行,你必須使用IN

SELECT replacement 
FROM replaces r1 
WHERE `ProductID` = '1' 
AND r1.group IN (SELECT group FROM replaces r2 WHERE r2.order = 30) 

也有在子查詢中不正確的WHERE條款。

或寫JOIN

SELECT r1.replacement 
FROM replaces r1 
JOIN replaces r2 ON r1.group = r2.group 
WHERE r1.productID = '1' 
AND r2.order = 30 

這個答案需要更多的工作,我認爲原來的問題有錯誤。在上面的評論中回答我的問題。

+0

你的第二個答案返回了11行。我雖然解決了這個問題。 – user3112969

+0

我看不到如何解決我的問題。一切都有相同的「組」,所以他們都會被匹配。你確定這是你想在主查詢和子查詢之間進行比較的列嗎? – Barmar

相關問題