2016-03-17 95 views
2

我只有一個表的所有值匹配:產品SQL列的值與其他列

ID | Product Name | Code 1 | Code 2 | Code 3 
******************************************** 
1 | Phone1 | MM | DD | 
2 | Phone2 | DD |  | EE 
3 | Phone3 | MM | ZZ | EE 
4 | Phone4 | XX |  | 

我想:

選擇所有手機及其代碼的其中之一匹配 電話1的其中一個代碼。

換句話說:

如果電話1 [代碼1] =電話2 [代碼1]或電話1 [代碼1] =電話2 [代碼2]或電話1 [代碼1] =電話2 [代碼3]或電話1 [代碼1] =電話3 [代碼1] ...等

每個電話1列的值比較每個PhoneX列的值。 3x3條件=總共9。

所以它應該返回:Phone2和Phone3(它應該跳過匹配空=空)。

我嘗試(SELF JOIN) - 我是新來的這一點,並不能得到這個權利:

SELECT `a.Product Name` 
FROM products a, products b 
WHERE 
(`a.Code 1` = `b.Code 1`) OR 
(`a.Code 1` = `b.Code 2`) OR 
(`a.Code 1` = `b.Code 3`) OR 
(`a.Code 2` = `b.Code 1`) OR 
(`a.Code 2` = `b.Code 2`) OR 
(`a.Code 2` = `b.Code 3`) OR 
(`a.Code 3` = `b.Code 1`) OR 
(`a.Code 3` = `b.Code 2`) OR 
(`a.Code 3` = `b.Code 3`) 
AND `a.Product Name` = "Phone1"; 

預先感謝您!

回答

2

也許這樣的事情。

SELECT p.* 
FROM Products p 
     JOIN Products p1 ON p1.`Product Name` = 'Phone1' 
          AND (p1.`Code 1` IN (p.`Code 1`,p.`Code 2`,p.`Code 3`) 
           OR p1.`Code 2` IN (p.`Code 1`,p.`Code 2`,p.`Code 3`) 
           OR p1.`Code 3` IN (p.`Code 1`,p.`Code 2`,p.`Code 3`)) 
WHERE p.`Product Name` <> 'Phone1' 

SQL Fiddle Demo

+0

除了有點出位SQL Server語法,這看起來像它可以工作。 –

+0

@JoachimIsaksson啊是啊..對不起.. – JamieD77

+0

謝謝!如果我想要的話,在這個聲明中最好放置'NOT IN'這樣的地方:選擇所有的手機其中一個代碼與Phone1的代碼中的一個匹配**但是如果代碼= DD ** – weedtm

0

應該是這個查詢

select `a.Product Name` from products as a 
left join products as b on a.`a.Code 1` = `b.Code 2` 
left join prodcuts as c on a.`a.Code 1` = `c.Code 3` 
where `a.Product Name` = "Phone1";