我有以下查询
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
和
tblRawData.reportnum = 12345.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;
如果数据是这样的话。
tblReports报告编号: 410145 410144 410143 410142 410141
和tblRawData报告数字是这样的: 12345.410145 410143 12344.410141
结果查询应该显示来自tblReports的所有5条记录 - 但其中三条记录具有来自tblRawData的注释等。
答案 0 :(得分:1)
重写以允许不匹配。
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] & "*"
使用LEFT JOIN是一种常见的约定,而不是RIGHT JOIN。
答案 1 :(得分:0)
我没有检查所有内容,但我有一些想法。也许你必须交换LIKE条件?
tblRawData.reportnum LIKE "*" & tblReports.reportnumber
如果不是问题,您可以尝试使用trim
功能吗?
Trim(tblReports.reportnumber) LIKE "*" & Trim(tblRawData.reportnum)
答案 2 :(得分:-1)
SQL查询的通配符是百分号'%'而不是星号。尝试使用它。但是如果你包括每场比赛,为什么在你的查询中有这个呢?