我对Access 2003还是很陌生,我在所谓的内部联接方面一直遇到一些问题。我有两个无法编辑的表,因此我要查询它们,两个表之一中的信息与用户的个人资料有关,第二个表是与他们有关的辅助信息,例如电子邮件地址。
我的问题是我需要对表2(辅助)应用条件,但有时记录不存在,因为并非表1的全部都与表2匹配。因此,我选择保留表中的所有字段1,并且仅与表2匹配,但是由于我对表2的标准,除非表2中有值,否则我永远都不会得到结果。
我在表1中有一个字段,让我知道表2中是否会有值,所以我想做的是
if table1val = "1" Then table2val Like "*01*"
。到目前为止,这还没有奏效,可能是由于我的错误,所以我想知道在设计视图中是否可行,因为从查找来看,似乎在sql视图中是可能的,但是我没有运气由于我缺乏sql知识,所以尝试这样做。
编辑:我当时所做的工作 表2的标准:
在note_txt下:Like "*help*" Or Like "*HELP*" Or Like "*Help*"
在category_code下:"Emails" Or "Email"
在high_priority_ind下:Like "-1"
所有这些都可以,但是如果该字段显示#Deleted
,则不会返回任何内容我希望这些标准基于的表1中的字段是何时
prod_marker:Not Like "0"
我的理解是您不能在条件中包含if,因为说如果您将“ 1”作为表1的条件,它的作用就像table1 = 1,而您不能有table1 = if。因此,有没有更好的方法可以解决此问题,因为看来我无法拥有
If(Not (prod_marker) Like "0") Then ((high_priority_ind) Like "-1")
下面是我能够想到的SQL,这只会使我的访问崩溃(我没有包括SELECT和FROM,因为它很长,我不确定是否有必要):
WHERE (((dbo_client_link.link_id_txt)=[Enter Policy Number]) AND
((dbo_client_link.link_relationship_code)="O" Or
(dbo_client_link.link_relationship_code)="J") AND
((dbo_producer.aga_direct_ind) Like "0") Or
(((dbo_producer.aga_direct_ind) Like "-1" ) And
( (dbo_note.note_txt) Like "*help*" Or
(dbo_note.note_txt) Like "*HELP*") AND
((dbo_note.category_code)="Emails" Or
(dbo_note.category_code)="Email") AND
((dbo_note.high_priority_ind) Like -1)))
答案 0 :(得分:0)
我的问题是我需要将标准应用于表2(辅助),但有时该记录不存在,因为并非表1的全部都与表2匹配。
您需要使用从Table1
(主)到Table2
(辅助)的左联接。如果在设计视图中执行此操作,则应该能够右键单击联接(两个表之间的线),然后转到联接属性。您要选择包括表1中的所有记录,并且仅包括表2中联接字段相等的那些记录
现在,您可以使用Table1.prod_marker <> "0"
表达式作为条件(由于不需要通配符搜索,因此不需要LIKE运算符)。遵循以下原则:prod_marker
字段中有哪些类型的值?仅仅是“ 0”和“ 1”,还是您还有其他可能的值?如果您只会看到“ 0”或“ 1”,也可以使用Table1.prod_marker = 1
如果您还想基于Table2
中的值过滤记录,则可以添加OR条件(例如high_priority_ind = "-1"
,UCASE(note_txt) like "*HELP*"
和UCASE(category_code) like "*EMAIL*"