我不知道如何解释这个,我有一个包含三列的表,我需要选择具有列值的行,这些行在其他列中不会重复。
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
答案 0 :(得分:2)
这样的事情:
SELECT *
FROM new_table
WHERE CONCAT( col1, ' ', col2, ' ', col3 ) LIKE "%red%"
AND col1 <> col2
AND col2 <> col3
AND col1 <> col3;