mysql - 选择一个表中不在另一个表中的数据

标签 mysql database select

您好,我在选择时遇到了问题。我有一个应用程序,管理员可以在其中创建多个书籍列表,并且这些列表已分配给用户,然后他们可以选择他们想要的书籍,并且可以打印他们的选择。我在用户部分显示列表时遇到问题。用户可以从他们的选择中添加或删除书籍。我想我缺少一些条件。

表用户:

+----+-------+----------+
| 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/

相关文章:

php - 无法使用 AngularJS 和 PHP 从数据库中获取数据

mysql - 获取最新的日期行值

php - 当用户结账以比较购物车数量与数据库数量时的最终检查仅返回一条记录,即使购物车中有多个商品

php - 在 GROUP BY 中使用 LIMIT 为每个动态组获取 N 个结果

最佳匹配的MySQL搜索算法

sql - ROW_NUMBER() 仅适用于前 N 条记录

php - 生成随机句子

database - 哈希与数据库查找效率

database - 仓库PostgreSQL数据库架构推荐

php - 使用 SELECT 获取正确的行,在 PDO 中获取零行