Access SQL 避免使用 Instr = 0 或 Not Like 的笛卡尔积

Access SQL Avoid Cartesian Product using Instr = 0 or Not Like

我有两张桌子

T1        T2
list      remark
abc       this is my list  
def       i have abc remark 
ghi       other than I have def comment
jkl       ghi is also there
          and this one will
          and this one too

我正在尝试编写一个查询,该查询将 return T2 中与 T1 中的列表不同的所有备注。

我已经尝试了 Instr 和 Join with Not Like,但是卡在笛卡尔积问题上。

运行 一个查询,其中 Instr = True return 是我期望的列表

SELECT DISTINCT t2.remark, InStr([t2].[remark],[t1].[list]) AS [Check]
FROM t2, t1
WHERE (((InStr([t2].[remark],[t1].[list]))=True));

ghi is also there
I have abc remark
other than I have def comment

但是 运行 False 是我得到所有结果的地方,由于笛卡尔积:

与使用 Not Like

相同
SELECT DISTINCT t2.remark
FROM t2 LEFT JOIN t1 ON t2.Remark NOT LIKE "*" & t1.List & "*"

我也尝试过子查询,但没有成功。知道如何使用 Access SQL 解决这个问题吗?

我想我可以用 TRUE 编写语句,然后再执行另一个查询,其中备注不等于我的第一个查询的结果,但这似乎有点低效。

通常的方式(至少在 Access 中)是这样的:

SELECT tr.remark
FROM t2 LEFT JOIN t1 
  ON t2.Remark LIKE "*" & t1.List & "*"
WHERE t1.List IS NULL

尽管我不确定我是否曾经将此与 LIKE 一起使用过。

@Andre 比我快了几分钟。

这似乎也有效 returns 3 条记录

SELECT  remark
        , list
FROM    T1 LEFT JOIN T2 ON INSTR(T2.remark,T1.list)>0
  1. 我有 abc 备注 / abc
  2. 除了我有 def 评论 / def
  3. ghi 也有 / ghi

抱歉... returns 相反。

使用:

SELECT  remark
        , list
FROM    T2 LEFT JOIN T1 ON INSTR(T2.remark,T1.list)>0
WHERE   list IS NULL  
  1. 这是我的列表/NULL
  2. 而这个将/NULL
  3. 还有这个/NULL