1

我有以下查询

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 条记录 - 但其中 3 条记录具有来自 tblRawData 的注释等。

4

3 回答 3

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 是一个很常见的约定。

于 2012-10-29T20:11:39.980 回答
0

我没有检查所有内容,但我有一些想法。也许你必须交换 LIKE 条件?

tblRawData.reportnum LIKE "*" & tblReports.reportnumber

如果这不是问题,您可以尝试使用该trim功能吗?

Trim(tblReports.reportnumber) LIKE "*" & Trim(tblRawData.reportnum)
于 2012-10-29T20:12:22.667 回答
-1

SQL 查询的通配符是百分号“%”而不是星号。尝试使用它。但是,如果您包含所有匹配项,那么为什么要在查询中包含它呢?

访问通配符参考

于 2012-10-29T19:32:29.873 回答