Mysql查询查找多列中常见的记录

时间:2014-03-14 12:58:56

标签: php mysql

   | a  | b  | C  | d  | e  |
   |----+----+----+----+----|
   | 1  | 2  | 3  | 2  | 9  |
   | 2  | 3  | 2  | 3  | 5  |
   | 3  | 8  | 4  | 4  | 2  |
   | 4  | 9  | 8  | 5  | 3  |
   | 5  | 1  | 9  | 7  | 1  |
   | 6  | 12 | 10 | 9  | 10 |

我想要结果:

2,3

因为2,3在所有列中都很常见。

3 个答案:

答案 0 :(得分:0)

我不知道这是最好的方法。但是这样的事情:

SELECT
    value
FROM
(
    SELECT a as value FROM table1 UNION ALL
    SELECT b as value FROM table1 UNION ALL
    SELECT c as value FROM table1 UNION ALL
    SELECT d as value FROM table1 UNION ALL
    SELECT e as value FROM table1
) AS tbl
GROUP BY value
HAVING COUNT(value) > 1

这将导致:

value
2
3

答案 1 :(得分:0)

Havn尝试过这个,但它应该可以解决这个问题:

SELECT t1.a
FROM the_table t1
  JOIN the_table t2 ON t1.a=t2.b
  JOIN the_table t3 ON t2.b=t3.c
  JOIN the_table t4 ON t3.c=t4.d
  JOIN the_table t5 ON t4.d=t5.e

答案 2 :(得分:0)

SELECT DISTINCT c1.a FROM  `in_all_cols` c1 
JOIN  `in_all_cols` c2 ON ( c1.a = c2.b )  
JOIN  `in_all_cols` c3 ON ( c2.b = c3.c )  
JOIN  `in_all_cols` c4 ON ( c3.c = c4.d )  
JOIN  `in_all_cols` c5 ON ( c4.d = c5.e )
LIMIT 0 , 30

使用这种布局为我工作:

CREATE TABLE IF NOT EXISTS `in_all_cols` (
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  `d` int(11) NOT NULL,
  `e` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `in_all_cols` (`a`, `b`, `c`, `d`, `e`) VALUES
(1, 2, 3, 2, 9),
(2, 3, 2, 3, 5),
(3, 8, 4, 4, 2),
(4, 9, 8, 5, 3),
(5, 1, 9, 7, 1),
(6, 12, 10, 9, 10);