【发布时间】:2011-07-03 21:50:14
【问题描述】:
大家好,我正在工作中创建报告,由于某种原因,在使用左连接时遇到了一些严重的问题。我有两个表,一个 u_entities 表和一个 u_activities 表,其中存在从实体到活动的一对多关系。我需要找出哪些实体没有与之关联的活动。所以我想将连接实体留在活动中并列出空的活动。所以我的查询看起来像这样
SELECT *
FROM (SELECT a.activity_id, e.entity_id, e.acc_name
FROM u_entity AS e
LEFT JOIN u_activity AS a
ON e.entity_id = a.account_id) AS i
WHERE i.activity_id = ''
这需要的时间太长,所以只是为了查看左连接的结果,我尝试在 phpmyadmin 中运行子选择,看起来像这样
SELECT a.activity_id, e.entity_id, e.acc_name
FROM u_entity AS e
LEFT JOIN u_activity AS a
ON e.entity_id = a.account_id
我遇到了同样的问题,服务器一直在工作,但它永远不会完成。我不得不使用 xammp 在我的本地计算机上获取表格并运行查询,因为人们需要服务器并且它被锁定了。当我在本地主机端的 phpmyadmin 中运行第二个查询时,我的计算机崩溃了。实体表有大约 20,000 条记录和大约 80000 条记录,但我之前已经对这些表进行了内部连接,没有问题我不明白为什么这是一个问题。也许我的查询是错误的或什么的。我以前从未做过左连接,所以我不知道。如果有另一种方法可以做到这一点,那会很酷,但我真的很想知道为什么左连接不能正常工作。请任何回应将不胜感激。
【问题讨论】:
-
你能在两个查询(或至少内部查询)上发布解释吗?
-
至少应该在 e.entity_id、a.account_id、i.activity_id 上有一个索引
-
我同意@Dagon。这些表是如何编入索引的?