mysql使用反连接在两个表之间选择非重复值

jk9hmnmh  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(443)

我试图根据表b中的值从表a中选择值。但是,我不知道该用什么。
目标:
我网站上的一个用户从网页上的表a中获得一个完整的复选框列表。
然后用户选择一个复选框,并将该复选框中的值插入表b。
在某个时间点,用户返回到该网页,只看到没有插入表b的复选框。
在数据库术语中,我将使用一个select查询来比较表a(保存所有值)和表b(基本上存储表a中的值的副本)。
这是我的问题。wp\u ml\u skill\u class是表a,wp\u ml\u character\u 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);
bqjvbblv

bqjvbblv1#

你可以用一个 LEFT JOIN 在表a和b之间,检查 NULL 来自表b的结果,它将表示表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)

相关问题