在 mysql 中需要相反的结果,就像在 Microsoft SQL 中使用 except 一样。请在mysql中做
CREATE TABLE `table1` (
`SERIAL` bigint(20) UNSIGNED NOT NULL,
`DISPLAY` varchar(20) DEFAULT NULL,
`REMARK` varchar(20) DEFAULT NULL,
`A` varchar(20) DEFAULT NULL,
`B` varchar(20) DEFAULT NULL,
`C` varchar(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `table1`
ADD PRIMARY KEY (`SERIAL`),
ADD UNIQUE KEY `SERIAL` (`SERIAL`);
ALTER TABLE `table1`
MODIFY `SERIAL` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
INSERT INTO `table1` (`SERIAL`, `DISPLAY`, `REMARK`, `A`, `B`, `C`) VALUES
(1, 'YES', 'ITEM', 'APPLE', 'BATTLE', 'CAT'),
(2, 'YES', 'ITEM', 'APPLE', 'BALLON', 'CATTLE'),
(3, 'YES', 'ITEM', 'AROPLANE', 'BALL', 'CANDLE'),
(4, 'NO', 'ITEM', 'APPLE', 'BALL', 'CAT'),
(5, 'YES', 'COLOR', 'APPLE', 'BALL', 'CAT'),
(6, 'YES', 'ITEM', NULL, NULL, NULL),
(7, 'YES', 'ITEM', 'APPLE', 'BALL', 'CAT');
SELECT SERIAL,DISPLAY, REMARK,A,B,C
FROM table1
WHERE DISPLAY="YES"
AND REMARK ="ITEM" AND (
A in('APPLE')
AND C in('CAT')
OR B in('BALL')
)
结果:
(1, 'YES', 'ITEM', 'APPLE', 'BATTLE', 'CAT')
(3, 'YES', 'ITEM', 'AROPLANE', 'BALL', 'CANDLE'),
(7, 'YES', 'ITEM', 'APPLE', 'BALL', 'CAT');
现在与上述结果相反,但条件是 DISPLAY =YES 且 REMARK =ITEM 使用减号 except
我的sql中所需的输出
(2, 'YES', 'ITEM', 'APPLE', 'BALLON', 'CATTLE'),
(6, 'YES', 'ITEM', NULL, NULL, NULL)
只需反转 WHERE 子句中的 logiv 即可
SELECT SERIAL,DISPLAY, REMARK,A,B,C
FROM table1
WHERE DISPLAY="YES"
-- AND REMARK ="ITEM" AND (A in('APPLE') AND C in('CAT') OR B in('BALL') )
AND REMARK !="ITEM" OR NOT(A in('APPLE') AND C in('CAT') OR B in('BALL') )
参见:DBFIDDLE
注意:
DISPLAY='ITEM'