要使用的数据库和表格:

DROP DATABASE IF EXISTS employees;
CREATE DATABASE employees CHARACTER SET utf8mb4;
USE employees;

CREATE TABLE department (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  budget DOUBLE UNSIGNED NOT NULL,
  expense DOUBLE UNSIGNED NOT NULL
);

CREATE TABLE employee (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nif VARCHAR(9) NOT NULL UNIQUE,
  name VARCHAR(100) NOT NULL,
  last_name VARCHAR(100) NOT NULL
  department_id INT UNSIGNED,
  FOREIGN KEY (department_id) REFERENCES department(id)
);

INSERT INTO department VALUES(1, 'Developement', 120000, 6000);
INSERT INTO department VALUES(2, 'Systems', 150000, 21000);
INSERT INTO department VALUES(3, 'Human Resources', 280000, 25000);
INSERT INTO department VALUES(4, 'Accounting', 110000, 3000);
INSERT INTO department VALUES(5, 'R+D', 375000, 380000);
INSERT INTO department VALUES(6, 'Projects', 0, 0);
INSERT INTO department VALUES(7, 'Advertising', 0, 1000);

INSERT INTO employee VALUES(1, '32481596F', 'Wade', 'Smith', 1);
INSERT INTO employee VALUES(2, 'Y5575632D', 'Olivia', 'Jones', 2);
INSERT INTO employee VALUES(3, 'R6970642B', 'Seth', 'Murphy', 3);
INSERT INTO employee VALUES(4, '77705545E', 'Emma', 'Williams', 4);
INSERT INTO employee VALUES(5, '17087203C', 'Riley', 'Brown', 5);
INSERT INTO employee VALUES(6, '38382980M', 'Charlotte', 'Walsh', 1);
INSERT INTO employee VALUES(7, '80576669X', 'Jorge', 'Taylor', 2);
INSERT INTO employee VALUES(8, '71651431Z', 'Amelia', 'Davies', 3);
INSERT INTO employee VALUES(9, '56399183D', 'Brian', 'Miller', 2);
INSERT INTO employee VALUES(10, '46384486H', 'Ava', 'Wilson', 5);
INSERT INTO employee VALUES(11, '67389283A', 'Miles','Byrne', 1);
INSERT INTO employee VALUES(12, '41234836R', 'Sophia', 'Evans', NULL);
INSERT INTO employee VALUES(13, '82635162B', 'Nathaniel','Thomas', NULL);

前提条件:使用IN或NOT IN

预期结果:Returns the names of departments that do not have associated employees. (Using IN or NOT IN).

SELECT name
FROM department
WHERE id NOT IN (SELECT DISTINCT id_department FROM employee)

我试过了,它返回一个空集,我知道为什么会这样,但我找不到使用IN或NOT IN的方法

推荐答案

这是修复查询的另一种方法,即从部门列表中排除null个值:

SELECT name
FROM department
WHERE id NOT IN (
  SELECT DISTINCT department_id 
  FROM employee
  where department_id > 0  
);

Mysql相关问答推荐

mysql查询汇总数据

在mySQL中使用子查询和WHERE子句的JOIN

如何有效地计算共同的朋友/追随者?

约会时的意外行为

从 MySQL WordPress Select 最后一行

如何使用等于、喜欢和不等于在 json 字段上编写查询?

MySQL,递归 CTE.它如何以这种句法形式工作?

go&mysql&docker 拒绝连接

在 Spring Data jpa 中的 @Query 中无法识别本机查询

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

如何在每个国家/地区查询 GHTorrent(类 SQL 语言)的最常用语言

查询以从约会表中获取可用空档

用数字和字母对 VARCHAR 列进行排序

是否可以在一个查询中将字符串附加到许多匹配的行

MySql,将日期和时间列组合成时间戳

基于字符串动态创建 PHP 对象

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'

如何计算表格的列数

如何将 mysqldump 的输出拆分为较小的文件?

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询