首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件连接- mysql将如何智能地处理隐式信息

条件连接- mysql将如何智能地处理隐式信息
EN

Stack Overflow用户
提问于 2011-02-07 20:07:56
回答 1查看 255关注 0票数 0

刚刚遇到了一个连接,只有在满足特定条件的情况下才是必需的。

因此,我考虑了如何在不必要的情况下放弃连接。

一些谷歌搜索和调查让我遇到了相当复杂的查询,涉及到联合等。

让我为您展示两个表t1和t2的一个简单示例,其中包含两个字段id和val。

代码语言:javascript
复制
SELECT t1.id, t1.val, t2.val
FROM t1 
JOIN t2 ON t1.id = t2.id

现在t1.val可以有一个特殊的值-1,这使得连接是多余的,因为t2.val总是NULL

代码语言:javascript
复制
SELECT t1.id, t1.val, IF(t1.val = -1, NULL, t2.val)
FROM t1 
JOIN t2 ON t1.id = t2.id

因此,如果我联接,并且每个对联接表中字段的引用都是有条件的,并且不满足条件,那么联接肯定是多余的……MySQL是否意识到了这一点并放弃了连接?

因为我的数学直觉告诉我,这是一种标准情况,应该由像MySQL这样的专业数据库有效地处理。

有内幕消息吗?

诚挚的问候

拉斐尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-07 20:14:08

连接条件(在本例中为t1.id = t2.id)是确定结果行的唯一标准。因为在连接条件中没有引用t1.val的值,所以它不会影响包含或不包含的内容。如果您希望在t1.val为-1时省略行数,请在联接条件中包含一个测试:

代码语言:javascript
复制
SELECT t1.id, t1.val, t2.val
  FROM t1 
    JOIN t2 ON t1.id = t2.id AND t1.val != -1

如果您仍然希望t1 where t1.val=-1中的行出现在结果中,请使用[LEFT JOIN]1,它还将包括t1中t2中没有具有相同ID的行的所有行:

代码语言:javascript
复制
SELECT t1.id, t1.val, t2.val
  FROM t1 
    LEFT JOIN t2 ON t1.id = t2.id AND t1.val != -1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4921094

复制
相关文章

相似问题

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