没有相等项(SQL)的地方

问题描述 投票:0回答:2

我写了这个子句:

WHERE ec.etudiant = po.utilisateurEtudiant

有了这个,我有那个平等的学生。现在,我想转换此请求。我想获得“对于每个在id.ec.etudiant中都没有的学生”,我在“ po.utilisateurEtudiant”中找不到...我正在做某事。我怎么才能得到它?如果可能的话,避免使用LEFT JOIN ON:我正在直接在WHERE中寻找解决方案(由于与Symfony和我的代码相关的特定原因)。

谢谢您的回答。 7,8,9是个例子。我需要一个真正的动态请求,该请求只能保留“ po.utilisateurEtudiant”(包含示例7,8)和“ ec.etudiant”(包含7,8,9)之间的区别,所以我希望我的请求返回给我仅9)。并且只保留“ po.utilisateurEtudiant”中不包含“ ec.etudiant”的部分。我尝试了NOT EXISTS 1小时,但我却没有得到想要的东西:/我的完成请求(Symfony 4):

{
  return $em->createQuery(
    "SELECT u.nomUtilisateur, u.prenomUtilisateur, ec.id AS ec_id
    FROM App\Entity\CoursPlanning h
    INNER JOIN App\Entity\Cours c
    JOIN App\Entity\ProfCours p
    JOIN App\Entity\Utilisateur u
    JOIN App\Entity\CoursPlanning cp
    JOIN App\Entity\EtudiantCours ec
    JOIN App\Entity\PlageHoraire w
    JOIN App\Entity\DateCours d
    JOIN App\Entity\Formation f
    JOIN App\Entity\Pointage po
    WHERE u.roles = '[\"ROLE_USER\"]'
    AND cp.cours = '".$idCours."'
    AND cp.dateCours = '".$idDate."'
    AND po.cours = cp.id
    AND po.plageHoraire = cp.plageHoraire
    AND po.utilisateurEtudiant = u.id
    AND NOT EXISTS (SELECT 1 FROM App\Entity\EtudiantCours es
                    WHERE po.utilisateurEtudiant = es.etudiant )
    "
    )->getResult();
}

此请求返回的结果为空。但是,如果我这样做(在“不存在”中):“ po.utilisateurEtudiant = 7”,我得到8。或者:如果我做到“” po.utilisateurEtudiant = 8“,我得到7。

谢谢你的进步!

sql where-clause equality
2个回答
1
投票

您将使用not exists

select ec.*
from ec
where not exists (select 1
                  from po
                  where ec.etudiant = po.utilisateurEtudiant
                 );

0
投票

谢谢您的回答。 7,8,9是个例子。我需要一个真正的动态请求,该请求只能保留“ po.utilisateurEtudiant”(包含示例7,8)和“ ec.etudiant”(包含7,8,9)之间的区别,所以我希望我的请求返回给我仅9)。并且仅保留“ po.utilisateurEtudiant”不包含“ ec.etudiant”的部分。我用NOT EXISTS尝试了1个小时,但我从没有得到想要的东西:/我的完整要求(Symfony 4):

  

    {
      return $em->createQuery(
        "SELECT u.nomUtilisateur, u.prenomUtilisateur, ec.id AS ec_id
        FROM App\Entity\CoursPlanning h
        INNER JOIN App\Entity\Cours c
        JOIN App\Entity\ProfCours p
        JOIN App\Entity\Utilisateur u
        JOIN App\Entity\CoursPlanning cp
        JOIN App\Entity\EtudiantCours ec
        JOIN App\Entity\PlageHoraire w
        JOIN App\Entity\DateCours d
        JOIN App\Entity\Formation f
        JOIN App\Entity\Pointage po
        WHERE u.roles = '[\"ROLE_USER\"]'
        AND cp.cours = '".$idCours."'
        AND cp.dateCours = '".$idDate."'
        AND po.cours = cp.id
        AND po.plageHoraire = cp.plageHoraire
        AND po.utilisateurEtudiant = u.id
        AND NOT EXISTS (SELECT 1 FROM App\Entity\EtudiantCours es
                        WHERE po.utilisateurEtudiant = es.etudiant )
        "
        )->getResult();
    }

此请求返回的结果为空。但是,如果我这样做(不存在):“ po.utilisateurEtudiant = 7”,我得到8。或者:如果我执行“” po.utilisateurEtudiant = 8“,则得到7。

谢谢你前进

© www.soinside.com 2019 - 2024. All rights reserved.