我不知道该怎么解释,我有一个三列的表,我需要选择列值不在其他列中重复的行。

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

最佳答案

像这样的:

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

关于mysql - MySQL选择具有唯一列值的行与其他列进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22596073/

10-11 03:16
查看更多