MySQL 使用反连接来选择两个表之间的非重复值

标签 mysql join

我试图根据表 B 中的值从表 A 中选择值。但是,我不知道要使用什么。

目标:

  • 我网站上的用户从网页上的表 A 中获取了完整的复选框列表。
  • 然后用户选择一个复选框,该复选框的值为 插入表B。
  • 在某个时间点,用户返回到该网页,只能看到未插入表 B 中的复选框。

在数据库术语中,我将使用一个选择查询来比较表 A(包含所有值)和表 B(基本上存储表 A 中的值的副本)。

这是我的查询。 wp_ml_skill_class 是表 A,wp_ml_character_skill 是表 B

SELECT DISTINCT
s.skill_name, s.skill_id, c.char_id, c.um_id, c.class_id
FROM
`wp_ml_skill_class` sc
JOIN
`wp_ml_skill` s 
ON 
(s.skill_id = sc.skill_id)
JOIN 
`wp_ml_character` c
WHERE 
c.class_id = 3 
AND 
c.char_id = 5
AND
sc.skill_id 
NOT IN 
(SELECT cs.skill_id FROM wp_ml_character_skill cs);

最佳答案

您可以在表 A 和 B 之间使用LEFT JOIN 来完成此操作,检查表 B 中的 NULL 结果,这将表示表 A 中不存在的行在表B中。

SELECT A.*
FROM wp_ml_skill_class A
LEFT JOIN wp_ml_character_skill B
ON B.skill_id = A.skill_id
WHERE B.skill_id IS NULL

这里有一个小例子来演示:

create table A (id int, val varchar(10));
create table B (id int, val varchar(10));

insert into A values (1, 'a'), (2, 'b'), (3, 'c');
insert into B values (2, 'b');

SELECT *
FROM  A
LEFT JOIN  B
ON B.id = A.id
WHERE B.id IS NULL

输出:

id  val     id      val
1   a       (null)  (null)
3   c       (null)  (null)

关于MySQL 使用反连接来选择两个表之间的非重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52108264/

相关文章:

mysql - 在mysql中结合order by

MySql 查询 : How to select data which is not exist in last 90 days from the given date value?

php - mysql DELETE 查询出现 JOIN 错误...

mysql - 如何在 4 个表上创建外连接以获取所有值加上 1 个字段的计数

php - 通过搜索标签组合查找 ID

mysql - 复杂连接(Joining Joins)

带有 InnoDB 表的 MySQL 不断崩溃

mysql --ssl-verify-server-cert=true 返回 "SSL certificate validation failure"

php - 根据先前的选择隐藏选择框中的选项。从 SQL 生成的选项

apache-spark - 具有 32GB 或更多内存的 spark worker 遇到 fatal error