Join MS Access 07-联接查询中的通配符
我有以下疑问Join MS Access 07-联接查询中的通配符,join,ms-access-2007,Join,Ms Access 2007,我有以下疑问 SELECT tblUsers.userfullname, tblReports.reportdate, tblReports.reportnumber, tblRawData.reportcategory, tblRawData.reportissue FROM tblRawData RIGHT JOIN (tblUsers RIGHT JOIN tblReports ON tblUsers.userID = tb
SELECT tblUsers.userfullname,
tblReports.reportdate,
tblReports.reportnumber,
tblRawData.reportcategory,
tblRawData.reportissue
FROM tblRawData
RIGHT JOIN (tblUsers RIGHT JOIN tblReports ON tblUsers.userID = tblReports.userID) ON tblReports.reportnumber LIKE "*" & tblRawData.reportnum
WHERE (
((tblUsers.username) Like "*" & [Forms]![frmSelect]![txtUser] & "*")
AND
((tblUsers.userShift) Like "*" & [Forms]![frmSelect]![txtShift] & "*")
);
哪一个有效-除了
ON tblReports.reportnumber LIKE "*" & tblRawData.reportnum
我想匹配的是
tblReports.reportnumber = 410145
及
或者只是
tblRawDatw.reportnum = 410145
但出于某种原因,它不会找到第一个匹配项,例如:12345.410145,除非数字与第二个匹配项相同,例如:410145。我尝试将它格式化为数字和文本,但没有成功
知道我遗漏了什么吗
更新:我尝试用两个表进行另一个查询,但它不喜欢匹配。我试着取下那根绳子。示例:12345.410145变为12345410145,没有运气。这是我的第二个问题
SELECT tblReports.userID,
tblRawData.reportnum,
tblRawData.reportcategory,
tblRawData.reportissue,
tblReports.reportdate,
tblReports.reportnumber
FROM tblReports
LEFT JOIN tblRawData ON tblReports.reportnumber LIKE "*" & tblRawData.reportnum;
如果数据是这样的话
TBL报告编号:
410145
410144
410143
410142
410141
tblRawData报告编号如下:
12345.410145
410143
12344.410141
结果查询应显示tblReports中的所有5条记录,但其中三条记录包含tblRawData中的注释等。SQL查询的通配符是百分号“%”,而不是星号。试着用它来代替。但是,如果您要包含所有匹配项,那么为什么要在查询中包含这些内容呢
重写为不允许匹配
SELECT
u.userfullname,
r.reportdate,
r.reportnumber,
q.reportcategory,
q.reportissue
FROM (tblusers u
LEFT JOIN tblreports r
ON u.userid = r.userid)
LEFT JOIN (
SELECT
Val(Mid([reportnum],InStr([reportnum],".")+1)) AS RepNo,
r.reportcategory,
r.reportissue
FROM Rawdata AS r) AS q
ON r.reportnumber = q.RepNo
AND q.username Like "*" & [Forms]![frmSelect]![txtUser] & "*"
AND q.userShift Like "*" & [Forms]![frmSelect]![txtShift] & "*"
使用左连接而不是右连接是一种非常常见的惯例。我没有检查所有内容,但我有一些想法。也许你必须交换类似的条件
tblRawData.reportnum LIKE "*" & tblReports.reportnumber
如果这不是问题,您可以尝试使用微调功能吗
Trim(tblReports.reportnumber) LIKE "*" & Trim(tblRawData.reportnum)
ANSI-89是该类型-因此它是*。我不理解你关于包含所有比赛的问题。我的意思是,如果你包含所有比赛,为什么它在你的where子句中?举个简单的例子:从我喜欢的“*”表中选择*您不需要where子句。如果没有更多的解释,这个答案恐怕不适合MS Access。在MS Access中使用默认ANSI设置时,通配符为*,在Access外部使用Jet/ACE引擎和ADO,或在MS Access ANSI92内部使用SQL Server兼容设置时,通配符为%。Chasseter似乎在MS Access中工作,因此通配符确实是*。是的,“*”似乎在MS Access中工作。抱歉造成混乱。抱歉耽搁-被飓风桑迪耽搁了。对于这种不幸运的情况,它会给我来自rawdata的所有匹配记录,以及来自rawdata中不存在的报告的所有记录-并且rawdata匹配似乎也忽略了通配符。不匹配的记录需要包含为或d。reportnumber为空。我将在通配符上与您联系。我希望你和你的家人都安全,保持安全好吧,这场比赛是错误的。这是tblRawData.reportnum 12345.410145,类似于reportnumber*&410145不走运,我尝试了d.reportnum为Null和r.reportnum为Null,以达到相同的效果好的,我发布了一个完全不同的方法。可能会很慢。
Trim(tblReports.reportnumber) LIKE "*" & Trim(tblRawData.reportnum)