Mysql 如何从表中选择所有项及其与其他项的匹配项?

Mysql 如何从表中选择所有项及其与其他项的匹配项?,mysql,sql,Mysql,Sql,我有两张桌子: TBlachievents>>[ID,AchName] TBlusersAchid>>[用户ID,AchID] 我需要这样的结果(假设有4个成就,用户1已经实现了1和2: ID AchName UserID AchID 1 first 1 1 2 second 1 2 3 third NULL NULL 4 fourth

我有两张桌子:

TBlachievents>>[ID,AchName]

TBlusersAchid>>[用户ID,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

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

您似乎想列出特定用户拥有或没有的所有成就。要筛选
用户ID
,但仍保留结果集中的每个成就行,您必须在外部连接条件中包括
用户ID
选择选项(将其放在
WHERE
子句中只会选择用户取得成就的行,因为
WHERE
FROM
/
JOIN
之后进行评估)

尝试以下解决方案:

SELECT    *
FROM      tblachievements a
LEFT JOIN tbluserachievements b ON a.id = b.achid AND b.uid = 1

额外:

根据您的应用程序要求,可能最好只使用一个布尔值来指示用户是否达到了目标(
1
如果达到了目标,则为
0
如果未达到目标):

这将产生:

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

请在这个问题上多花点时间-这很让人困惑。我认为这个字符串中可能有太多逗号之类的。
ID,AchName,UserID,AchID 1,first,1,1,12,second,1,2,3,third,NULL,NULL,NULL 4,fourth,NULL,NULL
您的where子句没有意义,它基本上会得到所有行。这就是我想要的,我想查看所有行成就以及用户1从中取得的成就。示例数据会很好。就目前情况而言,我不知道你想要什么。试着用简单的英语说出你想要什么数据,特别是在给定架构的情况下,可能有多个用户具有任何给定的成就
 id     achname     achieved
 ---------------------------
 1      first       1     
 2      second      1     
 3      third       0   
 4      fourth      0