MySQL选择与其他列相比具有唯一列值的行

时间:2014-03-23 19:40:03

标签: mysql sql select where

我不知道如何解释这个,我有一个包含三列的表,我需要选择具有列值的行,这些行在其他列中不会重复。

Table:

CREATE TABLE `new_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` varchar(45) NOT NULL,
  `col2` varchar(45) NOT NULL,
  `col3` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `new_table` (`col1`, `col2`, `col3`) VALUES ('red', 'blue', 'red');
INSERT INTO `new_table` (`col1`, `col2`, `col3`) VALUES ('white', 'red', 'yellow');
INSERT INTO `new_table` (`col1`, `col2`, `col3`) VALUES ('red', 'red', 'red');
INSERT INTO `new_table` (`col1`, `col2`, `col3`) VALUES ('yellow', 'blue', 'black');

我在xor语句中尝试使用where

SELECT * FROM new_table WHERE
        col1 LIKE '%red%'
        xor col2 LIKE '%red%'
        xor col3 LIKE '%red%';

但我没有得到理想的输出

Output of this code

ID  COL1    COL2    COL3
2   white   red     yellow
3   red     red     red

我需要的输出

ID  COL1    COL2    COL3
2   white   red     yellow

如果我有N列数,我知道这不是最好的数据库设计。但仅仅是为了知识。
SQLFiddle

1 个答案:

答案 0 :(得分:2)

这样的事情:

SELECT * 
FROM new_table
WHERE CONCAT( col1,  ' ', col2,  ' ', col3 ) LIKE  "%red%"
AND col1 <> col2
AND col2 <> col3
AND col1 <> col3;