mysql - 值对应于 MYSQL 中的 NOT AT ALL

标签 mysql sql database

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'
 )

演示:http://sqlfiddle.com/#!2/0e7dd/1

关于mysql - 值对应于 MYSQL 中的 NOT AT ALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895079/

相关文章:

mysql - 为什么 Django ORM 找不到明显在我的数据库中的项目?

php - 查询两个时间戳日期之间的数据

java - 玩! Framework FakeApplication - 它实际上做了什么?

mysql - 无法从 Promise 获取 Plain 对象

php - 如何将此字符串存储为mysql中的有效json(utf8_encode和htmlentities没有帮助)

c# - mysql和mssql之间来回发送数据

mysql - 如何在 T-SQL 中选择一列中具有相同值的多个条目

mysql - 选择特定用户的 friend 的所有 ID

mysql - 向 mySQL 数据库发出命令的批处理脚本?

sql - 是否可以通过简单的 SQL INSERT 来实现手动增量?