2010-10-11 4 views
0

Je sens que j'écris un problème de mot, mais il est vraiment me déconcertant et j'espère vraiment que quelqu'un ici peut le résoudre:Vérification de deux tables les unes contre les autres dans MySQL requête

Je veux sélectionner une ligne de la table R. Le tableau A inclut les attributs Nom et Numéro. Mais avant de terminer la requête, je souhaite la vérifier par rapport à la table B. La table B inclut le nom, le numéro et le nom d'utilisateur de l'utilisateur. Basé sur l'entrée des utilisateurs, il insère des lignes dans la table B qui incluent leur nom d'utilisateur avec un nom et un numéro. Maintenant dans ma requête où je sélectionne une ligne de la table A, je veux m'assurer qu'il n'y a pas de lignes dans la table B avec le nom et le numéro correspondant pour cet utilisateur particulier.

J'ai essayé WHERE (A.Name = B.Name ET A.Number = B.Numéro ET B.Username! = '$ Username') mais je pense que j'étais loin de base avec cela. Toute aide serait ... incroyable.

+0

Dans MySQL, il est '<>' 'pas! ='. – mhitza

+0

! = A travaillé pour moi dans le passé, je pense que les deux vont bien. – RobHardgood

Répondre

1
select a.id 
from a 
where 
a.name=:name 
and 
not exists(select 1 from b where b.id=a.id and b.name=a.name) 
+0

Cela semble être utile ... pouvez-vous expliquer le code? – RobHardgood

+0

Cette simple sélection a.id à partir d'un où a.name =: nom –

+0

où testé testé cet utilisateur dans la table b: n'existe pas (sélectionnez 1 à partir de b où b.id = a.id et b.name = a .name) –

2
SELECT 
    A.id 
FROM 
    A 
    LEFT OUTER JOIN B ON 
     (A.Name = B.Name AND A.Number = B.Number) 
WHERE 
    B.Name IS NULL 
    AND B.Number IS NULL 
    AND B.Username = ? 
+0

Ce ne sera pas tout à fait le faire ... Voir, il y aura des lignes dans la table B qui incluent le nom d'utilisateur, mais ce que je cherche, ce sont les lignes qui ne le font pas. Il pourrait y avoir comme Robert-1-apple et Robert-2-apple et Robert-1-bravo, mais ce dont j'ai besoin est Robert-1-charlie ... – RobHardgood

+0

Ensuite, ajoutez aussi B.Username IS NULL à la place. Je ne suis pas tout à fait clair sur ce que tu veux. Est-ce que A a aussi une colonne de nom d'utilisateur? Quel est le but général de ce que vous essayez d'atteindre? –

+0

A n'a pas de colonne de nom d'utilisateur, juste le "nom" et le "numéro" pour correspondre à B. Je suis toujours perplexe. – RobHardgood

0
IF NOT EXISTS (SELECT 1 
     FROM tableA a 
     INNER JOIN tableB b 
     ON a.name = b.name 
     AND a.number= b.number 
     AND b.UserName = 'user' and b.name = 'name'and b.number = 'number') 
    SELECT * 
    FROM tableA x 
    WHERE x.name = 'name'and x.number = 'number' 
Questions connexes