刚刚遇到了一个连接,只有在满足特定条件的情况下才是必需的。
因此,我考虑了如何在不必要的情况下放弃连接。
一些谷歌搜索和调查让我遇到了相当复杂的查询,涉及到联合等。
让我为您展示两个表t1和t2的一个简单示例,其中包含两个字段id和val。
SELECT t1.id, t1.val, t2.val
FROM t1
JOIN t2 ON t1.id = t2.id现在t1.val可以有一个特殊的值-1,这使得连接是多余的,因为t2.val总是NULL。
SELECT t1.id, t1.val, IF(t1.val = -1, NULL, t2.val)
FROM t1
JOIN t2 ON t1.id = t2.id因此,如果我联接,并且每个对联接表中字段的引用都是有条件的,并且不满足条件,那么联接肯定是多余的……MySQL是否意识到了这一点并放弃了连接?
因为我的数学直觉告诉我,这是一种标准情况,应该由像MySQL这样的专业数据库有效地处理。
有内幕消息吗?
诚挚的问候
拉斐尔
发布于 2011-02-07 20:14:08
连接条件(在本例中为t1.id = t2.id)是确定结果行的唯一标准。因为在连接条件中没有引用t1.val的值,所以它不会影响包含或不包含的内容。如果您希望在t1.val为-1时省略行数,请在联接条件中包含一个测试:
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的行的所有行:
SELECT t1.id, t1.val, t2.val
FROM t1
LEFT JOIN t2 ON t1.id = t2.id AND t1.val != -1https://stackoverflow.com/questions/4921094
复制相似问题