mysql query deux tables, l'UNION et la clause where
J'ai deux tables.
J'ai une requête comme ceci:
SELECT * FROM (
Select requester_name,receiver_name from poem_authors_follow_requests as one
UNION
Select requester_name,receiver_name from poem_authors_friend_requests as two
) as u
where (LOWER(requester_name)=LOWER('user1') or LOWER(receiver_name)=LOWER('user1'))
Je suis à l'aide de l'UNION parce que je veux obtenir des valeurs distinctes pour chaque utilisateur si un utilisateur existe dans le premier tableau, et dans le deuxième.
Par exemple:
table1
nameofuser
peter
table2
nameofuser
peter
si pierre est sur la table je devrais recevoir le nom d'un temps parce qu'il existe sur les deux tableaux.
Encore obtenir une ligne de la première table et un deuxième à partir de la table numéro deux. Quel est le problème?
Toute aide appréciée.
Sont les colonnes dans les deux tableaux de la même époque? Peut-être dans un tableau de la colonne est de type
nop, ils sont tous les deux le même type de champs
Dans où votre déclaration, vous voulez probablement pour faire référence à la "u" avant chaque champ... donc
char
et dans l'autre il est de type varchar
il pourrait m'certains espaces....nop, ils sont tous les deux le même type de champs
Dans où votre déclaration, vous voulez probablement pour faire référence à la "u" avant chaque champ... donc
where (LOWER(u.requester_name) = ...
c'est simlar à la réponse que vous pouvez le voir dans: stackoverflow.com/questions/5452233/...OriginalL'auteur stefanosn | 2012-03-13
Vous devez vous connecter pour publier un commentaire.
Il y a deux problèmes avec votre SQL:
(C'est pas la question, mais doit être considéré) à l'aide de
WHERE
sur leUNION
au lieu de les tables, vous créer un spectacle de cauchemar: MySQL va créer une table temporaire contenant lesUNION
, puis l'interroger sur laWHERE
. À l'aide d'un calcul sur un champ (LOWER(requester_name)
) cela rend encore pire.La raison pour laquelle vous obtenez deux lignes est, que
UNION DISTINCT
sera seulement supprimer les doublons réels, de sorte que le tuple(someuser,peter)
et le n-uplet(someotheruser, peter)
sera le résultat d'une duplication.Modifier
De faire
(someuser, peter)
un double de(peter, someuser)
, vous pouvez utiliser:De sorte que vous ne sélectionnez
someuser
que vous savez déjà :peter
Édité ma réponse!
Merci beaucoup vraiment bonne approche!
OriginalL'auteur Eugen Rieck
Vous avez besoin de la clause where sur les deux sélectionne:
Les deux requêtes sont indépendants les uns des autres, de sorte que vous ne devriez pas essayer de se connecter autrement qu'en
union
.OriginalL'auteur Bohemian
Vous pouvez utiliser de l'UNION, si vous souhaitez sélectionner les lignes les unes après les autres à partir de plusieurs tables ou plusieurs ensembles de lignes à partir d'une même table tous comme un seul ensemble de résultats.
L'UNION est disponible depuis MySQL 4.0. Cette section illustre comment l'utiliser.
Supposons que vous avez deux tables liste des potentiels et des clients, un tiers que des listes de fournisseurs auprès de qui vous achetez des fournitures, et vous voulez créer une seule liste de diffusion par la fusion des noms et adresses de tous les trois tables. L'UNION fournit un moyen pour ce faire. Assumer les trois tables ont le contenu suivant:
http://w3webtutorial.blogspot.com/2013/11/union-in-mysql.html
OriginalL'auteur Bijon Krishna Bairagi
Vous faites de l'union avant et ensuite l'application de la clause where. Donc, vous obtiendrez une combinaison unique de "requester_name,receiver_name" et puis, où la clause s'applique. Appliquer la clause where dans chaque sélectionnez...
OriginalL'auteur amit_g
Où dans votre déclaration, référence de l'alias "u" pour chaque champ de référence dans votre où l'énoncé.
Donc le début de votre où la déclaration serait comme:
where (LOWER(u.requester_name) = ...
C'est simlar à la réponse que vous pouvez le voir dans: OÙ relevé après l'UNION en SQL?
OriginalL'auteur James Oravec
Vous devriez être en mesure d'utiliser le
INTERSECT
mot-clé au lieu de faire une requête imbriquée sur unUNION
.peut simplement être réécrit pour
http://www.bitbybit.dk/carsten/blog/?p=71
INTERSECT
mot-clé!OriginalL'auteur Jun Wei Lee