我需要在DQL中进行子选择

时间:2016-04-18 14:35:35

标签: sql dql

我有这个问题:

    $query = $this->createQueryBuilder('l')
        ->select('l')
        ->leftJoin('l.processedLeads', 'pl')
        ->where('pl.company <> :company')
        ->andWhere('pl.company IS NULL')
        ->setParameters(array('company' => $company))
        ->getQuery();

但我需要它形成如下:

SELECT * FROM leads WHERE NOT IN 
( SELECT * FROM processed_leads WHERE lead = :lead AND company = :company)

我可以在连接中进行子选择,其中连接的两个参数(lead_id和公司)不存在吗?

同样,只选择与特定公司在processedLeads中不存在的潜在客户?

1 个答案:

答案 0 :(得分:1)

我不熟悉QueryBuilder,但我会在DQL中推荐这样的东西:

$query = $em->createQuery('SELECT l FROM Project\model\leads l WHERE l NOT IN
    (SELECT p.lead FROM Project\model\processed_leads p WHERE p.lead = ? AND company = ?)')
    ->setParameters(array($lead, $company))
    ->getResult;

希望这对你有帮助。我会使用NOT IN语句。如果子查询返回一个空值,那么该公司的processed_leads中没有任何线索,你将获得所有线索 - 在这种情况下应该没问题。