J'ai deux tableaux (utilisateurs et articles) et je souhaite rédiger tous les articles (entre autres) d'un seul utilisateur. Je pense que je devrais utiliser un JOIN et WHERE mais j'obtiens une erreur pour utiliser WHERE.
Voici mon code:
SELECT username, post, joinDate, title, info FROM users
WHERE userId='18'
JOIN posts ON users.userId=posts.userId
ORDER BY date DESC
Je suis nouveau dans ce domaine et il y a peut-être un meilleur moyen, mais je ne peux pas le comprendre ATM. Merci pour toutes les réponses!
3 Réponses :
La clause JOIN vient avant la clause WHERE, après la clause FROM. Tout d'abord, vous réunissez toutes les tables dont vous avez besoin, puis vous effectuez votre filtrage avec WHERE. Comme ceci:
SELECT username, post, joinDate, title, info FROM users JOIN posts ON users.userId=posts.userId WHERE users.userId='18' ORDER BY date DESC
J'obtiens "# 1052 - Colonne 'userId' dans la clause where est ambiguë" quand je fais cela, qu'est-ce qui pourrait en être la cause?
Vous pouvez essayer avec JOIN posts USING (userId)
Vous devez spécifier votre alias de table avant tout nom de colonne dans la clause WHERE qui est contenu dans plusieurs des tables que vous avez jointes. WHERE users.userID = '18'
Remplacez par WHERE users.userId = '18 ' pour éviter toute ambiguïté. ''
Cela l'a fait! Merci!
essayez comme ci-dessous
SELECT u.*,p.*
FROM users u JOIN posts p ON u.userId=p.userId
WHERE u.userId=18
ORDER BY date DESC
où sera après join et 18 est la valeur de type de données int, donc pas besoin de guillemet simple pour cela et utiliser un alias pour éviter un nom de colonne ambigu
Pourquoi? Sélectionner * est toujours une mauvaise idée, ne le recommande pas. Pourquoi pensez-vous que l'aliasing avec des lettres simples va aider?
@Dharman J'ai utilisé le nom d'alias de la table qui ne ressemble pas à la sélection *, donc vous pensez que le nom d'alias de la table. * Et * est le même?
@Dharman donc avant de voter, vous devez clarifier votre idée
J'ai fait 2 points. Tout d'abord, vous devez toujours éviter SELECT * . Deuxièmement, l'alias à une seule lettre n'est pas nécessaire et n'aide en rien; cela rend la lecture plus difficile.
@Dharman ici dans SO, l'utilisateur qui fournit une réponse principalement pour chaque question de réponse liée à SQL utilise toujours le nom d'alias de lettre signle dans sa requête, savez-vous pourquoi? car ici la plupart des gens soumettent un sous-ensemble ou un échantillon de leur problème de la vie réelle, il est donc obligatoire d'informer les OP de ce dont il a besoin pour résoudre ce problème, pas du tout j'espère que vous avez compris mon point
SELECT username, post, joinDate, title, info FROM users JOIN posts ON users.userId=posts.userId and users.userId='18' ORDER BY date DESC if userId is in users table then YES you can use where userId='18'. If userId is in posts table then it should be userId='18' be in join part.
Vous avez manqué le point et votre réponse crée plus de confusion pour les débutants comme OP.
WHEREdoit venir aprèsJOINdéplacer
WHERE userId = '18 'après l'instruction de jointure et avant la commande par