希望你能提供帮助。我有三个表,并想创建一个条件查询,以根据一个表中存在的行创建一个子集,然后从结果中排除该行,然后查询最终的第三个表。我认为这很简单,但是我在 SQL 方面没有很好的实践,并且在对左连接、相关子查询等进行了 6 个小时的研究/测试之后,它有所帮助,但我仍然无法达到正确的结果集. 所以这里是设置:
t1
arn_mkt_stn
a00001_177_john_fm
a00001_177_bill_fm
a00001_174_dave_fm a00002_177_john_fm a00006_177_bill_fm
a00006_177_bill_fm
a00006_177_bill_fm
a00010_177_john_fm
- 注意:名称与3位前缀(例如_177)和fm部分的关系始终是一致的:'_177_john_fm'只有a000xx更改
T2
arn_mkt
A00001_105
A00001_177
A00001_188
A00001_246
A00002_177
A00003_177
A00004_026
A00004_135
A00004_177
A00006_177
A00010_177
实施例:因此,如果_177_JOHN_FM是arn_mkt_stn行的在T1的子字符串,排除它与177从T2的子串得到arn_mkts时-在这种情况下,所需的结果集将是:
A00003_177
A00004_177
A00006_177
同样,_177_BILL_FM 将返回:
A00002_177
A00003_177
A00004_177
A00010_177
然后
我
想使用此结果集从基于“A00003”
等
的
第三
个
表
中
提取
记录方法 [这里 $stn_code = JOHN_FM 和 $stn_mkt = 177]
"SELECT * FROM T2, T1 WHERE arn != SUBSTRING(T1.arn_mkt_stn, 1,6)
AND SUBSTRING(T1.arn_mkt_stn, 12,7) = '$ stn_code'
AND SUBSTRING(arn_mkt, 8,3) = '$stn_mkt' (然后使用此结果查询 T3..)
还有一个左连接和一个子查询,但我显然错过了一些东西!任何指点感激地收到,谢谢,
富有的。
[编辑:感谢您帮助 sgeddes。我将在上面扩展我的逻辑......首先,所需的结果集总是与每个查询只有一个名称相关,例如来自 T1,让我们使用 JOHN_FM。在 T1 中,JOHN_FM 当前与“arn”相关联(在 arn_mkt_stn 内):A00001、A00002 和 A00010”。T2 中的下一步是查找所有具有 JOHN_FM 的 3 位前缀 (177) 的“arn(在 arn_mkt 内)”,然后排除 T1 中的那些。注意:A00006 仍然存在,因为它没有连接到 T1 中的 JOHN_FM。BILL_FM 的相同查询给出了稍微不同的结果,不包括 A00001 和 A00006,因为它在 T1 中有这个关联。谢谢,R]