gpt4 book ai didi

mysql - 如果记录存在于 mysql 的另一个表中,则要求记录存在

转载 作者:行者123 更新时间:2023-11-29 00:04:02 24 4
gpt4 key购买 nike

目前这让我的大脑有点融化,但必须有办法做到这一点。查询基本上是这样的:

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 的工作方式不同,尽管它不应该。

关于mysql - 如果记录存在于 mysql 的另一个表中,则要求记录存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com