【问题标题】:SELECT From 2 Tables that not relation从 2 个不相关的表中选择
【发布时间】:2021-07-14 06:35:50
【问题描述】:

我有两个表“class”和“account_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

我想选择 user1 没有选择的所有类,我尝试了左连接、右连接、内连接,但不起作用

这是我的代码

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

谢谢

【问题讨论】:

    标签: mysql sql mariadb


    【解决方案1】:

    如果您只想获取 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'
    

    【讨论】:

      【解决方案2】:

      你的 sql

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

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

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

      通过此查询,您现在可以选择所有班级Id 值未出现在该用户参加的班级列表中的班级。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:
          select * from class 
          where id not in
          (select class.id 
          from class, account_class
          where class.id=id_class
          and username_account='user 1');
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-07-20
            • 2020-07-16
            • 1970-01-01
            • 2013-04-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多