表格是:
units (id,...) // approx' 10,000 units
contracts(id, unit_id, active, ...) // approx 50,000 records
我希望获得所有没有合同的单位(以及contracts.active=true
)。
我的想法是:
使用NOT IN
:
从单位中选择*
其中id not IN(从contract.active = true的合约中选择unit_id)
或者:
select * from units u
left join contracts c
on c.unit_id = u.id
where c.unit_id is null
并且,如果有一种本地方式在蛋糕中做,请告诉我光:)
感谢
答案 0 :(得分:1)
根据您的其他联接,NOT IN可能会给您带来不良影响。我建议使用以下SQL查询:
SELECT * FROM units AS u
LEFT JOIN contracts AS c
ON (c.unit_id = u.id AND c.active = 1)
WHERE c.id IS NULL
Cake还可以检查空字段。在此示例中,查询将返回帖子标题不为空的记录:
array ("NOT" => array (
"Post.title" => null
)
)
因此,根据您的模型设置方式,这可能对您有用:
$joins = array(('table' => 'contracts',
'alias' => 'Contracts',
'type' => 'LEFT',
'conditions' => array('Contracts.active' => 0)));
$conditions = array('Contracts.id' => NULL);
$units = $this->Units->find('all', array('joins' => $joins, 'conditions' => $conditions));