我只有一张桌子:产品

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/

10-11 19:17
查看更多