【发布时间】:2013-02-22 14:02:12
【问题描述】:
希望你能提供帮助。我有三个表,并想创建一个条件查询,以根据一个表中存在的行创建一个子集,然后从结果中排除该行,然后查询最终的第三个表。我认为这很简单,但是我在 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
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 是 T1 中 arn_mkt_stn 行的子字符串,则在从 T2 获取具有子字符串 177 的 arn_mkts 时将其排除 - 在这种情况下,所需的结果集将是:
A00003_177
A00004_177
A00006_177
同样,_177_BILL_FM 会返回:
A00002_177
A00003_177
A00004_177
A00010_177
然后我想使用这个结果集从基于“A00003”等的第三个表中提取记录
T3
阿恩
A00001
A00002
A00003
A00004
A00005
A00006
...
我尝试了多种方法 [这里 $stn_code = JOHN_FM 和 $stn_mkt = 177]
“从 T2、T1 中选择 * 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]
【问题讨论】:
标签: sql left-join correlated-subquery multi-query