好吧,我非常绝望。这是我第一次使用StackOverflow(我总是找到我所有的答案,但不是这次)。请社区我需要你的帮助,因为我不是SQL专家。 (我使用Access)。
我有3个桌子"用户","类型"和" User_update"。我想从" User"中获取价值。表格,但如果在" User_update"中有该用户的更新table我希望得到" User_update"表而不是更新的日期。 : - /
TABLE "USER"
id | user | type_id
--------------------
0 | bibi | 1
1 | toto | 1
TABLE "TYPE"
id | type
-----------
0 | admin
1 | normal
TABLE "USER_UPDATE"
id | user_id | type_id | date
-----------------------------------
0 | 1 | 0 | 9/3/2015
想要得到这样的东西:
user | type | date
--------------------
bibi | normal |
toto | admin | 9/3/2015
希望你们能帮忙!
答案 0 :(得分:0)
我不知道Access,但这是ANSI SQL的答案:
select coalesce(uu.user, u.user), t.type, uu.date
from user u
left join user_update uu on u.id = uu.id
join type t on t.id = coalesce(uu.type_id, u.type_id)
如果找到匹配的行,LEFT JOIN
可以从user_update
读取。 COALESCE
返回第一个非null值,因此如果找到user_update
返回值,则返回user
值。
注意:在ANSI SQL中date
和user
是保留字,因此可能需要对这些字词进行分隔,例如: "date"
或[date]
。
访问尝试次数:
select coalesce(uu.user, u.user), t.type, uu.date
from (user u
left join user_update uu on (u.id = uu.id))
join type t on (t.id = coalesce(uu.type_id, u.type_id))
或者也许:
select coalesce(uu.user, u.user), t.type, uu.date
from type t
join (user u
left join user_update uu on (u.id = uu.id))
on (t.id = coalesce(uu.type_id, u.type_id))
答案 1 :(得分:0)
作为新用户,我建议您使用"设计视图"设计大部分查询。您希望使用USER.type_id = TYPE.id和USER.user = USER_UPDATE.user
在两个表上加入USER表。以下SQL应该完成你想要的,返回" USER_UPDATE"记录是否有值,否则它将返回" TYPE"记录。
您需要查看" USER_UPDATE"中是否有多条记录?对于同一个用户,根据您的使用情况,多个记录的返回可能不是您要查找的内容,您需要构建一个选择查询以仅返回" USER_UPDATE" 中的最新记录p>
SELECT USER.id, USER.user, USER.type_id, IIf([USER_UPDATE].[type] Is Null, [type].[type],[USER_UPDATE].[type]) AS user_type, USER_UPDATE.date
FROM ([USER] LEFT JOIN TYPE ON USER.type_id = TYPE.id) LEFT JOIN USER_UPDATE ON USER.user = USER_UPDATE.user;