1


希望你能提供帮助。我有三个表,并想创建一个条件查询,以根据一个表中存在的行创建一个子集,然后从结果中排除该行,然后查询最终的第三个表。我认为这很简单,但是我在 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]

4

1 回答 1

1

您可以使用 aLEFT JOIN从 T2 中删除与 T1 中的记录匹配的记录。但是,我不确定我是否理解您的逻辑。

你说A00001_177_JOHN_FM应该返回:

A00003_177
A00004_177
A00006_177

但是,不会从上述结果中A00006_177_BILL_FM排除吗?A00006_177

如果我对您的理解正确,则此查询应该与您要查找的内容接近(不完全确定您需要返回哪些字段):

SELECT T2.arn_mkt, T3.arn
FROM T2 
  LEFT JOIN T1 ON
    T1.arn_mkt_stn LIKE CONCAT(T2.arn_mkt,'%')
  INNER JOIN T3 ON
    T2.arn_mkt LIKE CONCAT(T3.arn,'%')
WHERE T1.arn_mkt_stn IS NULL

小提琴演示示例

- 编辑 -

查看评论,这应该是您正在寻找的内容:

SELECT *
FROM T2 
  LEFT JOIN T1 ON
    T1.arn_mkt_stn LIKE CONCAT(LEFT(T2.arn_mkt,LOCATE('_',T2.arn_mkt)),'%') AND T1.arn_mkt_stn LIKE '%JOHN_FM'
  INNER JOIN T3 ON
    T2.arn_mkt LIKE CONCAT(T3.arn,'%')
WHERE T1.arn_mkt_stn IS NULL 

这是更新的小提琴:http ://sqlfiddle.com/#!2/3c293/13

于 2013-02-22T14:13:34.510 回答