SQLite查询没有按预期工作

时间:2014-07-23 18:37:37

标签: android sqlite

我遇到了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');
  • 练习表:练习集合
  • PersonalList表:列表
  • 的集合
  • Exercise_Personal_List:对其中练习是其中一部分的练习练习_运动
  • 的引用

我试图获取尚未添加到特定列表的练习列表。例如。未添加到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评估这些内容。它的测试速度更快:)。

感谢您的帮助!

2 个答案:

答案 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'
)