J'imagine que c'est une surveillance vraiment fondamentale de ma part, mais j'ai une requête SQL qui fonctionne bien. Mais je lorsque je sélectionne à partir de ce résultat (sélectionnez à partir de (SELECT)) CODE>
Je reçois une erreur "colonne double". Il existe des noms de colonnes en double, à coup sûr, dans deux tables où je les compare, mais ils ne causent pas de problème dans le résultat initial. Par exemple:
SELECT DISTINCT tag_id, tag FROM (SELECT _dia_tagsrel.tag_id, _dia_tagsrel.article_id, _dia_tags.tag
FROM _dia_tagsrel
JOIN _dia_tags
ON _dia_tagsrel.tag_id = _dia_tags.tag_id) a
3 Réponses :
Votre première requête retourne quatre colonnes:
tag_id code> li>
-
article_id code> li>
-
tag_id code> li>
-
tag code> li>
ul> Les noms de colonne en double sont autorisés dans un ensemble de résultats em>, mais ne sont pas autorisés dans une table em> - ou une table dérivée, vue, vue, vue, vue, cte ou la plupart Les sous-requêtes (une exception sont existez code> sous-requêtes). P> J'espère que vous pouvez voir le duplicata. Il n'est pas nécessaire de sélectionner tag_id code> deux fois, car le rejoindre code> nécessite que les valeurs soient identiques. Donc, il suffit de sélectionner trois colonnes: p> xxx pré> p>
Bonjour, alors - sans renommer les colonnes initiales, rendrais ces colonnes comme des alias fonctionnent? Merci
Merci, je vais marquer cela comme ma réponse. J'avais l'impression que je devais sélectionner les colonnes que j'utilise pour comparer, alors je viens de les laisser sortir. Donc, en fait, il suffit de choisir parmi 2 colonnes - article_id et tag et cela fonctionne.
Votre sous-requête a deux Ainsi, utilisez-en un (Joindre requiert si tag_id code> s, alors comment le moteur de base de données Décidez lequel vous souhaitez utiliser lequel vous souhaitez utiliser.
TAG_ID CODE> S être identique) ou repamiquez-le: p>
_dia_tag code> a une balise code> unique code> s puis que vous puissiez utiliser
existe code> au lieu de
Joindre intérieur Code>: P>
SELECT t.tag
FROM _dia_tags t
WHERE EXISTS (SELECT 1 FROM _dia_tagsrel tr WHERE tr.tag_id = t.tag_id);
In Vous êtes une deuxième requête I.E., la sous-requête, vous sélectionnez deux fois Tag_ID. Bien que cela provienne de deux tables différentes, cela fonctionne de la toile, vous sélectionnez les données. Mais lorsque vous sélectionnez deux fois les colonnes avec le même nom, il vous fournit une erreur en double. Vous trouverez ci-dessous la façon dont vous avez sélectionné la colonne qui est incorrecte
_dia_tagsrel.tag_id strong>, _ di_tagsrel.article_id, _dia_tags.tag_id strong>, _dia_tags.tag
Tout en utilisant des sous-demandes, fusionner, dans ou existe la clause, évitez d'utiliser les mêmes noms de colonne plusieurs fois. Une join simple ne fonctionne pas de besoin de subquiery, p>
Merci, je me rends maintenant merci en partie à @gordonlinoff que la table dérivée ne puisse pas distinguer les doublons. Je suis donc de les laisser éteindre (car je n'ai besoin que de comparer) ou de créer un alias.
C'est correct Gavin. Pouvez-vous s'il vous plaît fournir un vote up afin que d'autres puissent aussi être utiles
Je ne peux que penser que j'ai besoin d'alias les noms de colonne en double dans la requête initiale?
Dans ce dernier cas, vous créez une table dérivée, qui suit la sémantique du tableau. Les noms de colonne doivent être uniques.