要求记录存在,如果它们存在于MySQL的另一个表中

PixMach

目前,这使我的大脑融化,但是必须有一种方法可以做到。基本上查询看起来像这样:

SELECT r.* FROM records r
JOIN users u ON u.job_id = r.job_id  
LEFT JOIN records_requirements rr ON rr.record_id = r.id
INNER JOIN user_requirements ur on ur.requirement_id = rr.requirement_id

因此,基本上我想做的就是说获得与用户具有相同作业ID的所有记录,并且如果记录中有需求,则仅当用户在user_requirements表中具有匹配的记录时才选择它们。如果用户没有要求,则不要选择记录。

因此,获取所有具有相同job_id且无要求的记录,或具有相同job_id且没有任何用户没有要求的记录。

艾伦

如果不进行测试,我认为这样的方法应该起作用:

SELECT DISTINCT r.*
FROM records r
INNER JOIN users u ON u.job_id = r.job_id
LEFT JOIN records_requirements rr ON rr.record_id = r.id
LEFT JOIN user_requirements ur ON ur.requirement_id = rr.requirement_id 
  AND ur.user_id = u.id
WHERE 
  (
    (rr.record_id IS NULL) 
      OR 
    (rr.record_id IS NOT NULL AND ur.requirement_id IS NOT NULL)
  )
  AND u.id = ?

它的工作是保留联接以记录需求以不包含任何需求,然后保留联接至用户需求,以便仍提取具有需求但没有匹配的用户需求的记录。

然后使用where测试来允许空记录要求,或同时满足记录和用户要求。

最后,SELECT DISTINCT用于确保每条记录仅获得一个结果。

编辑:使用SQL Server的快速测试,如下所示:

DECLARE @Users TABLE (job_id int)
DECLARE @Records TABLE (id int, job_id int)
DECLARE @Records_Requirements TABLE (requirement_id int, record_id int)
DECLARE @User_Requirements TABLE (requirement_id int)

INSERT INTO @Users VALUES (1)

INSERT INTO @Records VALUES (1, 1)
INSERT INTO @Records VALUES (2, 1)
INSERT INTO @Records VALUES (3, 1)

INSERT INTO @Records_Requirements VALUES (1, 1)
INSERT INTO @Records_Requirements VALUES (2, 2)

INSERT INTO @User_Requirements VALUES (2)

SELECT DISTINCT r.*
FROM @Records r
INNER JOIN @Users u ON u.job_id = r.job_id
LEFT JOIN @Records_Requirements rr ON rr.record_id = r.id
LEFT JOIN @User_Requirements ur on ur.requirement_id = rr.requirement_id
WHERE (rr.record_id IS NULL) OR (rr.record_id IS NOT NULL AND ur.requirement_id IS NOT NULL)

结果:

id  job_id
2   1
3   1

我认为对于测试数据是正确的。也许MySQL的工作方式有所不同,尽管事实并非如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果所有记录都存在于SQL Server的另一个表中,则返回行列表

来自分类Dev

MySQL查询按存在于另一个表中

来自分类Dev

MySQL 查询不存在于另一个表中

来自分类Dev

如果一个表不存在于另一个表中,该如何删除

来自分类Dev

如果标识符不存在于另一个表中,则删除表中的行

来自分类Dev

如果数据存在于另一个表中,如何从表中获取数据 C# LINQ

来自分类Dev

MySQL根据记录是否存在于另一个表中选择布尔值

来自分类Dev

如果该行存在于另一个Datable中,则从该数据表中删除该行

来自分类Dev

SQL记录存在于另一个具有LEFT JOIN和GROUP BY的表中

来自分类Dev

SQL记录存在于另一个具有LEFT JOIN和GROUP BY的表中

来自分类Dev

如果该数据不存在于另一个表中,该如何选择该数据?

来自分类Dev

Python:比较列表中的值(如果存在于另一个列表中)

来自分类Dev

如果该值存在于另一个表中,则从该表返回另一个值

来自分类Dev

设置属性(如果存在于另一个列表中)

来自分类Dev

如果该行的字段存在于另一个文件中,则删除该行

来自分类Dev

列值必须存在于另一个表的非主列中

来自分类Dev

列值必须存在于另一个表的非主列中

来自分类Dev

SQL 只返回存在于另一个表中的 id

来自分类Dev

FirebaseRecyclerAdapter 检查 Id 是否存在于另一个表中

来自分类Dev

order by 列存在于另一个表中并删除多余的行

来自分类Dev

交叉表存在于一个数据库中,而不存在于另一个数据库中

来自分类Dev

返回存在于一个表中但不在另一个表中的结果

来自分类Dev

返回表中的所有行,并用新列指示它们是否存在于另一个表中

来自分类Dev

返回表中的所有行,并用新的列指示它们是否存在于另一个表中

来自分类Dev

如果熊猫数据帧列中的值存在于另一个数据帧中,则更新它们

来自分类Dev

如果外键存在于另一个表中,如何仅从一个集合中获取值

来自分类Dev

从表中获取数据,如果它存在于另一个表中,则从那里获取数据

来自分类Dev

如果存在于R中的另一个df中,则移动数据框中的组

来自分类Dev

如果值存在于另一个表中,如何将其放置在A列中;否则,将其放置在B列中

Related 相关文章

  1. 1

    如果所有记录都存在于SQL Server的另一个表中,则返回行列表

  2. 2

    MySQL查询按存在于另一个表中

  3. 3

    MySQL 查询不存在于另一个表中

  4. 4

    如果一个表不存在于另一个表中,该如何删除

  5. 5

    如果标识符不存在于另一个表中,则删除表中的行

  6. 6

    如果数据存在于另一个表中,如何从表中获取数据 C# LINQ

  7. 7

    MySQL根据记录是否存在于另一个表中选择布尔值

  8. 8

    如果该行存在于另一个Datable中,则从该数据表中删除该行

  9. 9

    SQL记录存在于另一个具有LEFT JOIN和GROUP BY的表中

  10. 10

    SQL记录存在于另一个具有LEFT JOIN和GROUP BY的表中

  11. 11

    如果该数据不存在于另一个表中,该如何选择该数据?

  12. 12

    Python:比较列表中的值(如果存在于另一个列表中)

  13. 13

    如果该值存在于另一个表中,则从该表返回另一个值

  14. 14

    设置属性(如果存在于另一个列表中)

  15. 15

    如果该行的字段存在于另一个文件中,则删除该行

  16. 16

    列值必须存在于另一个表的非主列中

  17. 17

    列值必须存在于另一个表的非主列中

  18. 18

    SQL 只返回存在于另一个表中的 id

  19. 19

    FirebaseRecyclerAdapter 检查 Id 是否存在于另一个表中

  20. 20

    order by 列存在于另一个表中并删除多余的行

  21. 21

    交叉表存在于一个数据库中,而不存在于另一个数据库中

  22. 22

    返回存在于一个表中但不在另一个表中的结果

  23. 23

    返回表中的所有行,并用新列指示它们是否存在于另一个表中

  24. 24

    返回表中的所有行,并用新的列指示它们是否存在于另一个表中

  25. 25

    如果熊猫数据帧列中的值存在于另一个数据帧中,则更新它们

  26. 26

    如果外键存在于另一个表中,如何仅从一个集合中获取值

  27. 27

    从表中获取数据,如果它存在于另一个表中,则从那里获取数据

  28. 28

    如果存在于R中的另一个df中,则移动数据框中的组

  29. 29

    如果值存在于另一个表中,如何将其放置在A列中;否则,将其放置在B列中

热门标签

归档