2
votes

MySQL SQL multiple

J'ai un problème avec ma requête. Je ne sais pas comment l'écrire correctement.

Maintenant, j'ai:

    prop_id rfp_id  _astat_code
    3,400   4,599   shr
    3,401   4,599   shr
    3,398   4,600   shr
    3,399   4,600   shr
    3,402   4,601   shr
    3,403   4,601   awr

Dans un bpm, nous avons beaucoup de propositions avec un identifiant unique. Je veux afficher uniquement rfp_id qui n'a pas astat_code = 'awr'.

Par exemple, j'ai:

SELECT i.bpm_id
FROM t_bpm_process i
WHERE NOT EXISTS
(
    SELECT 1
    FROM t_rfp_proposal r
    JOIN t_rfp_request AS rfp ON rfp.rfp_id=r.rfp_id 
    WHERE r._astat_code ='awr'
    AND r.status_code!='del'
    AND rfp.bpm_id=i.bpm_id
)

Je veux afficher uniquement rfp_id 4599, 4600. p >

La formule doit être universelle. Car il y aura par exemple 12 rfp_id, donc ça ne peut pas être fait uniquement pour 3 rfps. Pouvez-vous m'aider?


2 commentaires

Quel est le problème avec votre requête?


cela aurait probablement fonctionné en le changeant simplement en select * où vous avez select 1 . Edit: non, il n'y a pas de comparaison en cours. ... Quoi qu'il en soit ... Aussi, envisagez de choisir une réponse à accepter.


3 Réponses :


0
votes

Vous pouvez essayer d'utiliser un NOT IN

SELECT i.bpm_id
FROM t_bpm_process i
where i.rfp_id NOT IN (
  select rfp_id  
  from t_bpm_process
  where astat_code='awr'
)


0 commentaires

0
votes

cela devrait faire l'affaire

select i.bpm_id
from   t_bpm_process  i,
       t_rfp_proposal r,
       t_rfp_request  rfp
where  rfp.bpm_id     = i.bpm_id
and    r.status_code != 'del'
and    r._astat_code  = 'awr'


0 commentaires

0
votes
SELECT i.bpm_id
FROM   t_bpm_process i
LEFT JOIN
  (
    SELECT rfp.bpm_id
    FROM   t_rfp_proposal r
    JOIN   t_rfp_request rfp ON rfp.rfp_id=r.rfp_id 
    WHERE  r._astat_code ='awr'
      AND  r.status_code!='del'
  ) AS t ON i.bqm_id = t.bqm_id
WHERE t.bqm_id IS NULL

0 commentaires