[英]SELECT all rows MINUS rows from WHERE clause
我將如何修改查詢,以便從表中獲得除我在查詢中使用過的行之外的所有行的結果?
SELECT *
FROM cars
WHERE (makeModelDescription='Seat Arosa 2.0 Stella'
AND firstRegistration='EZ 03/2005'
AND mileage='101.000 km')
OR (makeModelDescription='Seat Arosa 3.0 Stella'
AND firstRegistration='EZ 03/2005'
AND mileage='101.000 km')
請注意,將所有三個屬性makeModelDescription,firstRegistration和Mileage作為條件中的鍵非常重要。
參考表:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Datenbank: `ref-table`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `cars`
--
CREATE TABLE `cars` (
`makeModelDescription` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
`firstRegistration` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`mileage` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`status` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`createTime` int(11) NOT NULL,
`updateTime` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Daten für Tabelle `cars`
--
INSERT INTO `cars` (`makeModelDescription`, `firstRegistration`, `mileage`, `status`, `createTime`, `updateTime`) VALUES
('BMW X5 4.4 i aus erster Hand', 'EZ 07/2000', '226.000 km', 'active', 1438870958, 1438870958),
('Corvette C5 Cabrio', 'EZ 03/2001', '96.000 km', 'active', 1438870958, 1438870958),
('Seat Arosa 2.0 Stella', 'EZ 03/2005', '101.000 km', 'active', 1436891529, 1436891529),
('Seat Arosa 2.0 Stella', 'EZ 03/2006', '101.000 km', 'active', 1436891529, 1436891529),
('Seat Arosa 3.0 Stella', 'EZ 03/2005', '101.000 km', 'active', 1437029730, 1437029730),
('Seat Arosa 4.0 Stella', 'EZ 03/2005', '101.000 km', 'active', 1437112074, 1437112074);
--
-- Indizes der exportierten Tabellen
--
--
-- Indizes für die Tabelle `cars`
--
ALTER TABLE `cars`
ADD PRIMARY KEY (`makeModelDescription`,`firstRegistration`,`mileage`);
過去我自己可以很容易地獲得查詢,但是實際上並不是那么簡單。 我還嘗試了已經提出的不同解決方案,但現在沒有一個解決方案能夠達到預期的效果。
由於所有列都不為空,因此您可以簡單地使用NOT來獲取不符合條件的記錄:
SELECT *
FROM cars
WHERE NOT
(
(makeModelDescription='Seat Arosa 2.0 Stella'
AND firstRegistration='EZ 03/2005'
AND mileage='101.000 km')
OR
(makeModelDescription='Seat Arosa 3.0 Stella'
AND firstRegistration='EZ 03/2005'
AND mileage='101.000 km')
);
參見http://sqlfiddle.com/#!9/1765e/1/0
SELECT *
FROM cars
WHERE NOT ((makeModelDescription='Seat Arosa 2.0 Stella'
AND firstRegistration='EZ 03/2005'
AND mileage='101.000 km')
OR (makeModelDescription='Seat Arosa 3.0 Stella'
AND firstRegistration='EZ 03/2005'
AND mileage='101.000 km'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.