SELECT 来自 2 个不相关的表

SELECT From 2 Tables that not relation

我有两个 tables“class”和“account_class(关系 table)”

class

id  name        day         time
1   course 1    sunday      08:00
2   course 2    monday      13:00
3   course 3    friday      19:00
4   course 4    saturday    01:00

和account_class

id  username_account        id_class
1   user1                   1
2   user1                   2
3   user2                   3
4   user3                   3

我想 select 所有 class 不是由 user1 select 编辑的,我尝试了左连接、右连接、内连接,但没有用

这是我的代码

SELECT class.* FROM class WHERE NOT EXISTS (SELECT * FROM account_class WHERE account_class.username_account = 'faraazap')

如果代码正确,应该是这样的

id  name        day         time
3   course 3    friday      19:00
4   course 4    saturday    01:00

谢谢

你的sql

SELECT class.* 
FROM class 
WHERE NOT EXISTS 
  (SELECT * 
   FROM account_class 
   WHERE account_class.username_account = 'faraazap')

当此用户未在任何注册时返回所有 classes,当用户未在任何注册时不返回 classes。这是因为您的 NOT EXISTS 没有将正在查询的 class 连接到正在参加的 class。需要稍作修改:

SELECT c.* 
FROM class c
WHERE c.Id not in  
  (SELECT id_class
   FROM account_class 
   WHERE account_class.username_account = 'faraazap')

通过此查询,您现在选择所有 class 值,其中 class Id 值未出现在此用户参加的 class 列表中.

我不确定您是想在比较中使用 faraazap 还是 user1。但是您可以使用“IN”语句来解决这个问题,如下所示。你只 select 记录 table “class”,它的 ID 在另一个 select 语句中。

SELECT * 
FROM class
WHERE class.id NOT IN (
  SELECT id_class 
  FROM account_class 
  WHERE username_account = 'user1'
)

如果您想做的只是获取 user1 未选择的所有 类,我认为您不需要任何连接。

SELECT *
  FROM class
 WHERE id IN (SELECT id_class 
                          FROM account_class
                         WHERE username_account <> 'user1')

但是,如果您想连接表,并从两个表中获取信息,那么:

SELECT c.*, ac.*
  FROM class c JOIN account_class ac ON c.id = ac.id_class
 WHERE ac.username_account <> 'user1'
select * from class 
where id not in
(select class.id 
from class, account_class
where class.id=id_class
and username_account='user 1');