1

我在加入 3 个表时遇到问题,其中我需要的数据是两个表之一,但不是两个表。

因此,假设我们有表“客户”,列“id”,“城市”,“州”,以及 2 个数据表 data_a 和 data_b,列“id”和我想要的数据。

现在我有一个类似于下面的声明。

SELECT cust.id, cust.city, cust.state, a.info as infoa, b.info as infob
  FROM customers cust
  INNER JOIN data_a a 
    ON cust.id = a.id
  INNER JOIN data_b b
    ON cust.id = b.id
  WHERE cust.city = 'mytown';

这需要很长时间才能运行,并且我没有从查询中得到任何响应,因为我会在它完成之前杀死它(如果它真的完成的话)。

如果我删除第二个数据表,该语句工作正常,只有当我添加它时,我才会遇到问题。所有 id 列以及 city 列都被索引。

还是我最好创建一个临时表并执行 2 个连接,将它们插入临时表并从临时表中读取?

编辑:修正错字

如果我确实离开了连接,则查询将处于执行状态,大概是无限期的。使用内连接时,我会得到一个空集。

4

1 回答 1

1

如果联接将在一个表上,但不是同时在两个表上,那么您需要 LEFT JOIN:

SELECT cust.id, cust.city, cust.state, a.info as infoa, b.info as infob
  FROM customers cust
  LEFT JOIN data_a a 
    ON a.id = cust.id
  LEFT JOIN data_b b
    ON b.id = cust.id
  WHERE cust.city = 'mytown';

确保您具有以下索引:

cust: ('city')
data_a: ('id')
data_b: ('id')
于 2012-05-23T18:36:00.623 回答