gpt4 book ai didi

mysql - 根据其他表的条件返回一组 SQL 结果

转载 作者:行者123 更新时间:2023-11-29 05:14:17 25 4
gpt4 key购买 nike

我不确定如何真正为这个问题命名,但如果你来到这里,我会尽力解释它。

你可以找到我的 SQL Fiddle here .

SELECT *
FROM `challenges`
LEFT JOIN `challenges_competitors` ON `challenges_competitors`.`challenge_id` = `challenges`.`id`
LEFT JOIN `users` ON `users`.`id` = `challenges_competitors`.`user_id`
WHERE `challenges`.`owner_id` != 3 AND `challenges`.`status` = 'pending'
ORDER BY `challenges`.`id`;

基本上我想对查询做的是返回 user3 不拥有或不属于的任何质询

这涉及到两个表。第一张表是挑战。此表将用户 ID 保存为 owner_id,以及挑战 ID 和一些其他数据。然后是包含 challenge_iduser_id 的 challenges_competitors 表,用于将该表与挑战和用户相关联。

当我运行查询并连接表时,肯定会有重复项,因为一个挑战可能有很多竞争对手。所以我想做的是,如果有一个挑战不是 user3 拥有的,但他是这个挑战的一部分,则不要拿回那排。

我真的希望我解释得很好。哈哈

最佳答案

要获取有关哪些挑战(他们的 id)不属于 users.id = 3 以及没有该用户的最基本信息竞争对手通过添加 NOT EXISTS 子句来更改您的查询就足够了。

SELECT c.id
FROM `challenges` AS c
WHERE
c.`owner_id` <> 3 -- discard challenges that have user 3 as their owner
AND c.`status` = 'pending'
AND NOT EXISTS ( -- discard challenges that have user 3 as their competitor
SELECT 1
FROM `challenges_competitors` AS cc
WHERE
cc.`user_id` = 3 -- limit this query to return only rows where user 3 is a competitor
AND cc.`challenge_id` = c.`id` -- join condition with challenges table
);

这是您修改后的 SQL FIDDLE .

如@xQbert 在his comment 中建议的那样,要获取您在查询中附加的整组列,您可以保留连接。 .

SELECT *
FROM `challenges` c
LEFT JOIN `challenges_competitors` cc
ON cc.`challenge_id` = c.`id`
LEFT JOIN `users` u ON u.`id` = cc.`user_id`
WHERE
c.`owner_id` != 3
AND c.`status` = 'pending'
AND NOT EXISTS (
SELECT 1
FROM `challenges_competitors` cc2
WHERE cc.`id` = cc2.`id` and cc2.`user_id` = 3
)
ORDER BY c.`id`;

关于mysql - 根据其他表的条件返回一组 SQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35302218/

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