使用单个查询,我需要获取所有对象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查询使用的方法是否有任何性能问题,或者是获得所需结果的更好方法?
答案 0 :(得分:0)
就我所见,您的查询看起来很好。
但是,您应该记住join
上的条件应该用于匹配外键。遵循这种做法至少可以使您的查询更具可读性和可维护性。