您好,我在选择时遇到了问题。我有一个应用程序,管理员可以在其中创建多个书籍列表,并且这些列表已分配给用户,然后他们可以选择他们想要的书籍,并且可以打印他们的选择。我在用户部分显示列表时遇到问题。用户可以从他们的选择中添加或删除书籍。我想我缺少一些条件。
表用户:
+----+-------+----------+
| id | name | class_id |
+----+-------+----------+
| 1 | John | 1 |
| 2 | Jenna | 2 |
+----+-------+----------+
表类
+-----+--------+
| id | name |
+-----+--------+
| 1 | class1 |
| 2 | class2 |
+-----+--------+
table 上书籍:
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
+----+-------+
表格列表
+-----+----------+
| id | class_id |
+-----+----------+
| 1 | 1 |
| 2 | 2 |
+-----+----------+
表记录
+---------+---------+
| list_id | book_id |
+---------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 4 |
| 2 | 5 |
+---------+---------+
表格选择
+---------+---------+---------+
| list_id | book_id | user_id |
+---------+---------+---------+
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 2 | 4 | 2 |
+---------+---------+---------+
我需要选择书名,不在选择中,但在列表中
我已经试过了,但它不工作,它应该如何:
SELECT b.id
, b.name
FROM records r
join books b
on b.id=r.book_id
join lists l
on l.id=t.list_id
join class c
on c.id=l.class_id
join users u
on u.class_id=c.id
left
join selection s
on r.book_id = s.book_id
where class_id=(select class_id from users where id=1)
and r.list_id=1
and not EXISTS (select book_id from selection)
r.list_id 由 session 切换
所以对于 John,我希望看到 test3,对于 Jenna,我希望看到 test1 和 test5。
我有一个问题,如果我将 test1 放入 John 的列表中,它就不会显示在 Jenna 的列表中。
最佳答案
我试过不在 r.book_id 中
SELECT b.id, b.name
FROM records r
JOIN books b on(b.id=r.book_id)
JOIN lists l on(l.id=t.list_id)
JOIN class c on(c.id=l.class_id)
JOIN users u on(u.class_id=c.id)
LEFT JOIN selection s on(r.book_id=s.book_id)
WHERE class_id =(SELECT id_tridy FROM studenti where id=1)
AND r.list_id=1 AND r.book_id NOT IN (select book_id from selection)
关于mysql - 选择一个表中不在另一个表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410660/