如果找到引用,则在另一个表中选择值

时间:2015-09-22 07:56:55

标签: sql ms-access ms-access-2010

好吧,我非常绝望。这是我第一次使用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

希望你们能帮忙!

2 个答案:

答案 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中dateuser是保留字,因此可能需要对这些字词进行分隔,例如: "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"

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;