2014-06-25 3 views
0

J'utilise postgresql 9.1 et je souhaite sélectionner certains enregistrements de la table. Les détails sont comme ci-dessous: nom de la table: Muser champs à sélectionner: userid, mailid, n ° de téléphoneSélectionnez Requête pour vérifier l'une ou l'autre ou la condition

J'ai utilisé requête comme:

SELECT userid, mailid, phonenumber FROM muser WHERE phonenumber = ? OR mailid = ? 

et il devrait satisfaire aux conditions suivantes:

  1. afficher un enregistrement lorsque les deux sont présents
  2. afficher un enregistrement lorsque seul mailid est présent
  3. afficher un enregistrement lorsque seul le numéro de téléphone est présent.

La chose importante est l'ID utilisateur est unique. le résultat devrait donc être un seul enregistrement. J'ai utiliser le filtre dans mon outil wso2esb.et dans le filtre lorsque j'ai filtré avec les conditions ci-dessus, dans les deux premières conditions requête fonctionne correctement, mais dans la dernière condition, il montre tous les utilisateurs disponibles dans table.is la requête est incorrecte? Ou je dois à l'utilisateur une autre clause au lieu de ou clause dans la requête

+2

Pourriez-vous s'il vous plaît fournir des données d'échantillons et les résultats attendus? – Uriil

+0

Par "présent" voulez-vous dire présent dans les enregistrements ou présent comme paramètre d'entrée? En d'autres termes: les champs 'phonenumber' et' mailid' peuvent-ils être NULL dans la table? Peuvent-ils être vides comme argument? Et comme dit Uriil: s'il vous plaît nous montrer des exemples de données et la production attendue! –

+0

non..ils ne sont pas vides..je prends l'échantillon phno et mailid dans la requête et en essayant de vérifier soit un ou les deux sont disponibles dans le tableau ou non? – user3129056

Répondre

1

passe null comme la valeur du paramètre absent

select userid, mailid, phonenumber 
from muser 
where 
    (phonenumber = ? or ? is null) 
    and 
    (mailid = ? or ? is null) 
+0

: merci pour la réponse. S'il vous plaît vérifier le lien ci-dessous .. j'ai mis à jour ma question avec plus de détails http://stackoverflow.com/questions/24422963/select-query-to-check-both-or-either-or-condition – user3129056

0

Le fait que le userid est unique ne signifie pas que le courrier ids et le téléphone les nombres sont uniques. Si deux utilisateurs ont le même phonenumber, ce qui peut arriver dans les entreprises, vous obtiendrez deux utilisateurs lors de la recherche de ce numéro de téléphone. Garde cela à l'esprit.

Je suppose que les deux paramètres sont donnés ou que l'un des deux est manquant. Dans le dernier cas, passez le NULL pour le paramètre manquant.

permet d'utiliser les paramètres $1 pour l'identifiant de messagerie et $2 pour le numéro de téléphone

SELECT 
    userid, mailid, phonenumber 
FROM 
    muser 
WHERE 
    ($1 IS NULL OR $1 IS NOT NULL AND mailid = $1) AND 
    ($2 IS NULL OR $2 IS NOT NULL AND phonenumber = $2) 
Questions connexes