我在 ms access 中为三个表写了一个查询" Process Name"," Work_Log1"和" ACn_reviewer"。
现在" Work_Log1" table正在使用" Process NAme"和" ACN_REviewer"表。
但是" Work_log1" table在某些行中具有空值,用于" ACN_Reviewer"表
正在运作查询我想出了
select w.[activity_id], w.[activity_start_date], w.[reporting month] ,
r.[Reviewer_Name] , p.[process_name]
from [process name] p left join
([work_log1] w left join [acn_reviewer] r
on w.[ACN Reviwer] = r.[ACN_Reviewer_ID] )
on w.[process] = p.[process_id]
where w.[activity_id] = 54447
现在我知道work_log1表中没有进程ids null。
我问的问题是,在没有连接的情况下,有哪些方法可以进行上述查询?
像这样的东西,只在acn_reviewer上加入
select w.[activity_id], w.[activity_start_date], w.[reporting month] ,
r.[Reviewer_Name] , p.[process_name]
from [process name] p , [work_log1] w left join [acn_reviewer] r
on w.[ACN Reviwer] = r.[ACN_Reviewer_ID]
where w.[process] = p.[process_id] and
w.[activity_id] = 54447
我希望现在我很清楚
所以我可以在sql中写这样的东西,这会在ms-access中抛出错误
select w.[activity_id], w.[activity_start_date], w.[reporting month] ,
r.[Reviewer_Name] , p.[process_name] from [process name] p, [work_log1] w
left join [acn_reviewer] r
on w.[ACN Reviwer] = r.[ACN_Reviewer_ID] on w.[process] = p.[process_id]
where w.[activity_id] = 54447 ;
由于
Pradyut
答案 0 :(得分:1)
从我从上面的属性中收集的内容:
Process Name (p)
p.[process_name]
p.[process_id]
Work_Log1 (w)
w.[activity_id]
w.[process]
w.[acn reviwer]
w.[activity_start_date]
w.[reporting month]
ACN Reviewer (r)
r.[acn_reviewer_id]
r.[reviewer_name]
Process Name
和ACN Reviewer
如何相关?如果不是,则无法根据NULL
中的Work_Log1
值来桥接它们。
答案 1 :(得分:0)
最后一次尝试:我正在考虑....也许你想把这些结果联合到另一个选择,其中work_log1左连接到acn_reviewer(没有首先加入work_log1)以获取情况process为null且acn_reviewer不是?是?没有...?谁知道。我累了。访问不允许完整的外连接和东西......也许这就是你想要做的,实际上?
select pw.[activity_id],
pw.[activity_start_date],
pw.[reporting month] ,
r.[Reviewer_Name],
pw.[process_name]
from ([work_log1] as w
join [process name] as p
on w.[process] = p.[process_id] ) as pw
join [acn_reviewer] as r
on pw.[ACN Reviwer] = r.[ACN_Reviewer_ID]
where pw.[activity_id] = 54447
-- all records in work_log1 that have a matching row both
-- in acn_reviewer and process via the join
union
select pw.[activity_id],
pw.[activity_start_date],
pw.[reporting month] ,
null as [Reviewer_Name],
pw.[process_name]
from ([work_log1] as w
join [process name] as p
on w.[process] = p.[process_id] ) as pw
left join [acn_reviewer] as r
on pw.[ACN Reviwer] = r.[ACN_Reviewer_ID]
where pw.[activity_id] = 54447 and r.[acn reviewer] is null
-- all records where work_log1, WITH a row in process,
-- WITHOUT a row in acn_reviewer
union
select pw.[activity_id],
pw.[activity_start_date],
pw.[reporting month] ,
r.[Reviewer_Name] as [Reviewer_Name],
null as [process_name]
from ([work_log1] as w
join [acn_reviewer] as r
on w.[ACN Reviwer] = r.[ACN_Reviewer_ID] ) as wr
left join [process name] as p
on w.[process] = p.[process_id]
where pw.[activity_id] = 54447 and p.[process_id] is null
-- all records where work_log1, WITHOUT a row in process,
-- WITH a row in acn_reviewer
union
select pw.[activity_id],
pw.[activity_start_date],
pw.[reporting month] ,
null as [Reviewer_Name],
null as [process_name]
from ([work_log1] as w
left outer join [acn_reviewer] as r
on w.[ACN Reviwer] = r.[ACN_Reviewer_ID] ) as wr
left outer join [process name] as p
on wr.[process] = p.[process_id]
where pw.[activity_id] = 54447 and p.[process_id] is null and wr.[ACN_Reviewer_ID] is null
-- all records in work_log1 that have no matching rows in either process or acn_reviewier
-- cuzzz its a left outer join and the where says the joined tables return null-thing
访问是奇怪的,如果你将整个事情放入select * from (query with unions) as x where activity_id = 54447
但是我不确定,可能会也可能不会喜欢它。我没有测试过这个。但你希望得到这个想法。希望这就是你想要的。 * IF NOT --->像njk这样的ERD提供了我们/你是正确的(b / c你说他错了)会非常有帮助,没有它或没有示例结果集,它显示你需要的NULL我就是无法继续。 *
或...你的第一个查询被剥离了连接?
select w.[activity_id],
w.[activity_start_date],
w.[reporting month],
r.[Reviewer_Name],
p.[process_name]
from work_log1 as w, acn_reviewer as r, process as p
where (w.[acn reviewer] = r.acn_reviewer_id or r.acn_reviewer_id is null) and
w.process = p.process_id