我试图根据表 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/