或者用select中替换内连接?

时间:2010-06-30 18:19:25

标签: sql mysql

我正在尝试理解和修改输入字段使用的SQL查询以进行智能搜索。

原始代码在这里:

((`clients` INNER JOIN `addresstorecord` ON `clients`.`uuid` = 
   `addresstorecord`.`recordid` AND `addresstorecord`.
   `tabledefid`='tbld:6d290174-8b73-e199-fe6c-bcf3d4b61083' AND
    addresstorecord.primary='1') INNER JOIN 
  `addresses` ON  `addresstorecord`.`addressid` = `addresses`.`uuid`)

我实际上并不需要内连接,因为我的所有信息都在一个表中。

在这种情况下,理论上我可以用我的表名替换内连接查询吗?或者我是否必须实际从声明中选择?

2 个答案:

答案 0 :(得分:1)

查询可以使用连接来限制结果集中的行,而不仅仅是要显示其他列。例如:

INSERT INTO tableA (col1) VALUES (10), (20), (30);
INSERT INTO tableB (col1) VALUES (20);

SELECT tableA.col1 FROM tableA;

返回三行:10,20和30。

SELECT tableA.col1 FROM tableA JOIN tableB ON tableA.col1 = tableB.col1;

返回一行:20。

因此,在您的示例中,联接意味着查询仅返回clients中具有匹配行的addresses个。

答案 1 :(得分:0)

如果删除联接,则将输出clients表中的所有行。如果这是你想要的,你可以删除连接,但我不这么认为。连接实际上是过滤输出,只给出clients.uuid = addresstorecord.recordid等客户端行。我认为您想要在输出中看到的所有数据都在客户端表中,但您需要过滤的数据不是这样,您需要连接。