MySQL中有三个表,如下所示
Table:Travel Table:Airline Table:Location
Code From To Code Name Port Country
----- ---- --- ---- ---- --- -------
ET PAR IST ET Ettihad PAR France
ET NYC ANK VA VirginAir MER France
VA BER PAR TA TurkishAir IST Turkey
TA SIN MER AF AirFlorida SIN Singapore
TA SHA SIN VM VimanaAir ANK Turkey
AF MER DUB
我想查找根本不从法国出发的航空公司的名称,其中还包括根本没有任何航类的航空公司。请注意,ET 和 AF 从法国出发。所以,结果表将是
Airline
-------
VirginAir
TurkishAir
VimanaAir
我已经用一般的 LEFT JOIN 查询进行了测试,发现 WHERE Location.Country <> 'France'
所有连接消除了 AF 但仍然显示 ET。
表格和数据可供任何人测试:
CREATE TABLE Airline (
`Code` varchar(2) NOT NULL,
`Name` varchar(30) NOT NULL,
PRIMARY KEY (`Code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO Airline (Code, `Name`) VALUES
('AF', 'AirFlorida'),
('ET', 'Ettihad'),
('TA', 'TurkishAir'),
('VA', 'VirginAir'),
('VM', 'VimanaAir');
CREATE TABLE Location (
`Port` varchar(3) NOT NULL,
Country varchar(30) NOT NULL,
PRIMARY KEY (`Port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO Location (Port, Country) VALUES
('ANK', 'Turkey'),
('DUB', 'Emirates'),
('IST', 'Turkey'),
('MER', 'France'),
('NYC', 'USA'),
('PAR', 'France'),
('SIN', 'Singapore');
CREATE TABLE Travel (
`Code` varchar(2) NOT NULL,
`From` varchar(3) NOT NULL,
`To` varchar(3) NOT NULL,
PRIMARY KEY (`Code`,`From`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO Travel (Code, `From`, `To`) VALUES
('AF', 'MER', 'DUB'),
('ET', 'NYC', 'ANK'),
('ET', 'PAR', 'IST'),
('TA', 'SHA', 'SIN'),
('TA', 'SIN', 'MER'),
('VA', 'BER', 'PAR');
最佳答案
尝试:
select *
from Airline a
where not exists(
select 1
from Travel t
join Location l
on t.from = l.port
where t.Code = a.code
and l.Country = 'France'
)
关于mysql - 值对应于 MYSQL 中的 NOT AT ALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895079/