如何使用MySQL在不同的列中找到匹配的记录?

时间:2012-03-15 09:37:22

标签: mysql

我遇到一个MySQL查询问题。 我有一张包含以下结构的表格:

+------+------+------+
| c1   |  c2  |  c3  |
+------+------+------+
| AA   |  A-A |  11  | - row1
| B-B  |   BB |  12  | - row2
| A-A  |   AA |  13  | - row3
| BB   |  B-B |  14  | - row4
| CC   |  C-C |  15  | - row5
| CC   |  C-C |  16  | - row6
| DD   |  DDD |  17  | - row7
+------+------+------+

IF(记录在 c1 ==记录在 c2 ) - >线匹配

IF(记录在 c1 ==记录在 c1 ) - >线匹配

row1 match row3

row2 match row4

row5 match row6

如何创建mysql查询以显示匹配的行?

我为我的英语道歉。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用交叉产品执行此操作:

SELECT * FROM table t1, table t2 WHERE t1.c1=t2.c1 OR t1.c1=t2.c2

答案 1 :(得分:-1)

如果您将表连接到自身,则可以指定它应匹配的条件。只需给它两个不同的别名:

    SELECT table1.*, 
           table2.* 
      FROM nameoftable table1
INNER JOIN nameoftable table2
        ON (table1.c1 = table2.c2
           OR table1.c1 = table2.c1)

您可能会发现它抱怨,因为每个表都有相同的列名,在这种情况下,您需要为每列指定别名而不使用*(这不是最佳做法,因为您可能会得到返回比你需要的更多的数据,这比较慢):

SELECT table1.c1 AS t1c1,
       table1.c2 AS t1c2,
       table1.c3 AS t1c3,
       table2.c1 AS t2c1,
       table2.c2 AS t2c2,
       table2.c3 AS t2c3