gpt4 book ai didi

mysql - 如何从表中选择所有内容并从另一个表中选择其匹配项?

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

我有两个表:

Tbl成就>> [ID,AchName]

TblUsersAchievements>> [UserID,AchID]

我需要这样的结果(假设有 4 个成就,用户 1 取得了 1 和 2:

 ID     AchName     UserID     AchID
1 first 1 1
2 second 1 2
3 third NULL NULL
4 fourth NULL NULL

我尝试过这样的事情:

 SELECT 
tblacheivements.id,
tblacheivements.achname,
tbluserachievements.uid,
tbluserachievements.achid
FROM
tbluserachievements
RIGHT OUTER JOIN tblacheivements ON (tbluserachievements.achid = tblacheivements.id)
WHERE
tbluserachievements.uid = 1 OR
tbluserachievements.uid IS NULL

它得到了正确的结果,但是当我更改用户时,结果是错误的。

最佳答案

您似乎想列出特定用户拥有或没有的所有成就。要过滤 UserID,但仍保留结果集中的每个成就行,您必须在外连接条件中包含 UserID 选择(将其放入WHERE 子句将仅选择用户实现成就的行,因为 WHERE 是在 FROM/JOIN 之后评估的。)

尝试这个解决方案:

SELECT    *
FROM tblachievements a
LEFT JOIN tbluserachievements b ON a.id = b.achid AND b.uid = 1
<小时/>

额外:

根据您的应用程序要求,也许最好简单地使用一个 bool 值来指示用户是否已实现它(1 如果他们实现了,0如果没有):

SELECT    a.*, b.achid IS NOT NULL AS achieved
FROM tblachievements a
LEFT JOIN tbluserachievements b ON a.id = b.achid AND b.uid = 1

这会产生:

 id     achname     achieved
---------------------------
1 first 1
2 second 1
3 third 0
4 fourth 0

关于mysql - 如何从表中选择所有内容并从另一个表中选择其匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746896/

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