我遇到了SQLite查询的问题,无法弄清楚。这些是我的表:
CREATE TABLE Exercise
(
e_id int auto_increment primary key,
name varchar(20)
);
CREATE TABLE PersonalList
(
p_id int auto_increment primary key,
name varchar(20)
);
CREATE TABLE Exercise_Personal_List
(
e_id_m int auto_increment primary key,
p_id_m int
);
INSERT INTO Exercise
(e_id, name)
VALUES
('1', 'exercise1'),
('2', 'exercise2'),
('3', 'exercise3'),
('4', 'exercise4'),
('5', 'exercise5'),
('6', 'exercise6');
INSERT INTO PersonalList
(p_id, name)
VALUES
('1', 'list1'),
('2', 'list2'),
('3', 'list3');
INSERT INTO Exercise_Personal_List
(e_id_m, p_id_m)
VALUES
('2', '1'),
('4', '1'),
('6', '1'),
('1', '2');
我试图获取尚未添加到特定列表的练习列表。例如。未添加到List 1的那些。我的查询:
select * from Exercise
where e_id not in (
select e_id from Exercise_Personal_List
where p_id_m like '1'
)
结果为空。我没有在查询中看到错误。正确的结果应该是1,3,5。
顺便说一句,我正在使用http://sqlfiddle.com评估这些内容。它的测试速度更快:)。
感谢您的帮助!
答案 0 :(得分:2)
我认为您的意思是在e_id
的第二个实例更改为e_id_m
时执行以下查询:
select * from Exercise
where e_id not in (
select e_id_m from Exercise_Personal_List
where p_id_m like '1'
)
答案 1 :(得分:0)
创作中有点混乱 - 你不应该在加入表中使用auto_increment
:
CREATE TABLE Exercise_Personal_List
(
e_id_m int,
p_id_m int
);
选择应该是:
select * from Exercise
where e_id not in (
select e_id_m as e_id from Exercise_Personal_List
where p_id_m like '1'
)