0

更新:

从那以后,我意识到我这样做的方式不是最理想的,并且永远无法正常工作,现在我使用两个表而不是三个,这似乎有效。

如果您有解决方案,欢迎您回答,但如果他们有类似的问题,只能帮助其他人。


我有一个包含 uid、名称和基本信息的用户表。我有一个带有 sid、设置名称和设置默认值的设置表。

我还有一个包含 sid、uid 和值的 users_settings 表,将用户的设置链接到设置的名称和用户的名称。

在一个查询中,我将如何选择一个用户,并“循环”通过设置表,为每个设置选择 users_settings 中的用户设置(如果存在),或者该设置的默认值(如果不存在)?

每个设置最好在结果集中显示为一列(列的名称是设置的名称,值是设置的值)。

如果这是难以理解的,这里有一个例子:

用户表:

uid name   email
1   Maria  maria@example.com
4   George george@example.com

设置表:

sid name     default_value
1   uicolour #f00
2   language en

users_settings 表:

uid sid value
4   1   #000
1   2   es

MySQL 查询 uid 4 的期望结果:

uid name   email              setting_colour setting_language
4   George george@example.com #000           en

MySQL 查询 uid 1 的所需结果:

uid name   email             setting_colour setting_language
1   Maria  maria@example.com #f00           es
4

1 回答 1

0

好的,在使用它并了解有关左连接的更多信息之后,这似乎可行:

SELECT t_users.*, t_users_settings.*, t_settings.*
FROM t_users 
LEFT JOIN t_users_settings ON t_users.uid = t_users_settings.t_uid  
LEFT JOIN t_settings ON t_settings.t_sid != t_users_settings.t_sid
WHERE t_users_settings.t_sid IS NOT NULL 
AND t_users_settings.t_uid IS NOT NULL 
AND t_users.uid = '<input user id here>';
于 2012-07-06T18:37:31.370 回答