首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有OR语句的JOIN语句

带有OR语句的JOIN语句
EN

Stack Overflow用户
提问于 2018-06-08 00:45:49
回答 2查看 64关注 0票数 2

我正在尝试解决连接问题,其中我需要在连接中使用or语句。

我有两张桌子。表1有大约1000条记录,表2有数百万条记录。

表1有两个字段(claim1、claim2),如果这两个字段中的任何一个与表2的claim2字段匹配,那么我需要将table2.field1和table2.field2值插入到一个临时表中。

假设我有这两张表

代码语言:javascript
复制
    table 1 claim1  claim2      table 2 claim   field1  field2
              1001    2001          1001    a1  a2
              1002    2002          1002    b1  b2
              1003    2003          1003    c1  c2
                                    2001    d1  d2
                                    2002    e1  e2

我正在尝试从表2中获取claim1和claim2字段的表1中记录的值。

所以我写了这篇文章

代码语言:javascript
复制
SELECT CLAIM, FIELD1, FIELD2
FROM TABLE1 T1
JOIN TABLE2 T2 ON T2.CLAIM = T1.CLAIM1 
                OR T2.CLAIM = T1.CLAIM2​

如果我只是运行它,它会在几秒钟内运行,然后我就能拿回记录。

代码语言:javascript
复制
SELECT CLAIM, FIELD1, FIELD2
FROM TABLE1 T1
JOIN TABLE2 T2 ON T2.CLAIM = T1.CLAIM1 

添加or语句后,我在大约15分钟后终止了查询。

代码语言:javascript
复制
SELECT CLAIM, FIELD1, FIELD2
FROM TABLE1 T1
JOIN TABLE2 T2 ON T2.CLAIM = T1.CLAIM1 
                OR T2.CLAIM = T1.CLAIM2​

任何帮助都将不胜感激。我只是花了好长时间才想明白这一点

EN

回答 2

Stack Overflow用户

发布于 2018-06-08 02:10:17

请检查此SQL:

代码语言:javascript
复制
SELECT CLAIM, FIELD1, FIELD2 FROM TABLE1 JOIN TABLE2 ON TABLE1.CLAIM1 = TABLE2.CLAIM
UNION ALL
SELECT CLAIM, FIELD1, FIELD2 FROM TABLE1 JOIN TABLE2 ON TABLE1.CLAIM2 = TABLE2.CLAIM

它应该是有效的!

但是,我认为query中一定包含了您的父级TABLE1表中的更多列。因为在给定的示例中,此查询的工作方式类似于过滤器。一个筛选器,它将确保TABLE2的所有记录在临时表中都至少有一条记录在父TABLE1中。

如果您正在以完整性的方式管理您的数据,那么结果将与SELECT * FROM TABLE2相同。

票数 0
EN

Stack Overflow用户

发布于 2018-06-08 02:35:34

OR是一个性能杀手,特别是对于JOINs。你可以用两个LEFT JOINs来解决这个问题:

代码语言:javascript
复制
SELECT COALESCE(T2_1.CLAIM, T2_2.CLAIM) as CLAIM,
       COALESCE(T2_1.FIELD1, T2_2.FIELD1) as FIELD1,
       COALESCE(T2_1.FIELD2, T2_2.FIELD2) as FIELD2
FROM TABLE1 T1 LEFT JOIN
     TABLE2 T2_1
     ON T2_1.CLAIM = T1.CLAIM1 LEFT JOIN
     TABLE2 T2_2
     ON T2_2.CLAIM = T1.CLAIM2​ AND T2_1.CLAIM IS NULL
WHERE T2_1.CLAIM IS NOT NULL OR T2_2.CLAIM IS NOT NULL;

奇怪的是,您没有从TABLE1中选择任何字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50746414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档