MySQL加入有两个条件

时间:2012-05-19 12:40:01

标签: mysql performance join left-join

使用单个查询,我需要获取所有对象A的列表以及当表B中与对象C关联时返回“1”的附加列,或者当没有关联时返回“0”表B中的对象C.

表A包含所有对象A. 表B包含与另一个对象C相关联的所有对象A.

我知道对象C的ID。

目前我在JOIN中使用带LEFT JOIN的查询和带AND的两个条件。 对于返回值列,我使用“(TableB.id IS NOT NULL)作为关联”。

表A可能只包含数十至一百条记录。 表B可能容纳数千至数十万条记录。 表C可能包含数千到数十万条记录。

TableA.id is index
TableB.tablea_id is index
TableB.id is index
TableB.tablec_id is index
TableC.id is index

我的查询目前看起来像这样:

SELECT TableA.name, TableA.code, (TableB.id IS NOT NULL) AS associated
FROM TableA 
LEFT JOIN TableB ON TableA.id=TableB.tablea_id AND TableB.tablec_id = $input

我对SQL查询使用的方法是否有任何性能问题,或者是获得所需结果的更好方法?

1 个答案:

答案 0 :(得分:0)

就我所见,您的查询看起来很好。

但是,您应该记住join上的条件应该用于匹配外键。遵循这种做法至少可以使您的查询更具可读性和可维护性。