/ / Zapytanie SQLite nie działa zgodnie z oczekiwaniami - android, sqlite

Zapytanie SQLite nie działa zgodnie z oczekiwaniami - android, sqlite

Mam problem z zapytaniem SQLite i nie mogę go rozwiązać. Oto moja tabela:

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");
  • Tabela ćwiczeń: zbiór ćwiczeń
  • Tabela PersonalList: zbiór listy
  • Exercise_Personal_List: odniesienie, do którego należy ćwiczenie, Exercise_Personal_List

Próbuję uzyskać listę ćwiczeń, które nie zostały jeszcze dodane do konkretnej listy, np. Te, które nie zostały dodane do listy 1. Moje zapytanie:

select * from Exercise
where e_id not in (
select e_id from Exercise_Personal_List
where p_id_m like "1"
)

Wynik jest pusty. Nie widzę błędu w zapytaniu, poprawny wynik powinien wynosić 1, 3, 5.

Przy okazji, używam http://sqlfiddle.com ocenić te rzeczy. Jest szybszy do testowania :)

Dzięki za pomoc!

Odpowiedzi:

2 dla odpowiedzi № 1

Myślę, że masz zamiar wykonać następujące zapytanie, w którym druga instancja e_id został zmieniony na 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"
)

0 dla odpowiedzi nr 2

W kreacji jest trochę zamieszania - nie powinieneś używać auto_increment w tabeli łączenia:

CREATE TABLE Exercise_Personal_List
(
e_id_m int,
p_id_m int
);

A wybór powinien być:

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"
)