【问题标题】:Database - Query to retrieve rows not existing in the other table数据库 - 查询以检索其他表中不存在的行
【发布时间】:2016-03-28 11:53:23
【问题描述】:

所以我有两个相互连接的表

TABLE Admin_Evaluate
EvalID int primary key,
EvalStatus tinyint,
UserID int (foreign to user)

TABLE Items
ItemID int primary key,
EvalID (foreign to Admin_Evalulate)

Sample Data:

| TABLE Admin Evaluate |
 ---------------------------------------------
 EvalID | EvalStatus | UserID
   1         0           5
   2         1           5
   3         0           5
   4         1           5
   5         1           5
   6         1           5


 | TABLE Items |
 ----------------------------------------------
 ItemID  | EvalID 
   1         2
   2         4

所以基本上我想检索 EvalID 其中 EvalStatus = 1 和 UserID = 5 AND DOESN'T EXISTSTable Items

结果应该是EvalID 5和6

提前致谢:)

【问题讨论】:

    标签: php mysql database database-design


    【解决方案1】:

    你可以使用NOT EXISTS:

    SELECT EvalID
    FROM Admin_Evaluate AS a
    WHERE EvalStatus = 1 AND UserID = 5 AND 
          NOT EXISTS (SELECT 1 FROM Items AS i WHERE i.EvalID = a.EvalID)
    

    【讨论】:

      【解决方案2】:

      这可以通过左连接来完成:

      SELECT t.evalID FROM Admin_Evaluate t
      LEFT OUTER JOIN Items s
       ON(t.evalID = s.evalID)
      WHERE s.evalID is null
        AND t.evalstatus = 1
        and t.userID = 5
      

      【讨论】:

        【解决方案3】:

        你可以使用左连接:

        SELECT * FROM Admin_Evaluate a LEFT JOIN Items i ON i.EvalId = a.EvalId WHERE EvalStatus = 1 AND UserID = 5 AND i.EvalId is NULL;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-11
          • 1970-01-01
          • 2019-12-10
          • 2013-09-03
          • 2023-02-07
          • 1970-01-01
          • 1970-01-01
          • 2020-12-09
          相关资源
          最近更新 更多