我只有一张桌子:产品
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的代码。
换句话说:
如果Phone1[代码1]=Phone2[代码1]或Phone1[代码1]=Phone2[代码2]或Phone1[代码1]=Phone2[代码3]或Phone1[代码1]=Phone3[代码1]。。。等
比较每个Phone1列的值和每个PhoneX列的值。3x3条件=9。
所以它应该返回:Phone2和Phone3(它应该跳过空=空的匹配项)。
我的尝试(自我加入)-我对此还不熟悉,无法正确处理:
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";
提前谢谢你!
最佳答案
也许是这样的。
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
关于mysql - SQL将列的值与其他列的所有值匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36069661/