2009-11-13 7 views
0

J'ai remarqué qu'il y avait des threads avec des questions similaires, et j'ai regardé à travers eux mais n'a pas vraiment obtenu une réponse convaincante. Voici ma question:SQL SubQuery obtenant une colonne particulière

La sous-requête ci-dessous renvoie un tableau avec 3 colonnes, USERNAME, COMPANY, POSITION. Je veux juste obtenir la colonne USERNAME sans modifier la sous-requête à l'intérieur. J'ai essayé ce qui suit:

SELECT username from (SELECT username, company, position FROM table1 WHERE username IN (SELECT username FROM members_network WHERE xscore <= 18 AND xscore >= 15)) 

mais la table externe n'est pas définie. Quelqu'un peut-il me dire comment récupérer uniquement le nom d'utilisateur de la sous-requête?

Merci à tous!

+0

Quelle erreur exacte obtenez-vous? Cela me va bien. – Dan

+0

Salut Dan, merci pour votre réponse. L'erreur que j'obtiens est: # 1248 - Chaque table dérivée doit avoir son propre alias –

Répondre

2

Vous ne dites pas quel RDBMS vous travaillez. Certains, tels que SQL Server, exigent que les vues en ligne reçoivent un alias de table. Malheureusement, je n'ai pas le temps de démarrer une machine virtuelle Windows pour vérifier, mais vous pouvez essayer:

SELECT username 
from (SELECT username, company, position 
    FROM table1 WHERE username IN 
     (SELECT username 
     FROM members_network 
     WHERE xscore <= 18 AND xscore >= 15)) T 
2

Vous devez attribuer un alias de table à la sous-requête:

SELECT x.username 
    FROM (SELECT username, company, position 
      FROM table1 
     WHERE username IN (SELECT username 
           FROM members_network 
          WHERE xscore <= 18 AND xscore >= 15)) x 

Le x est l'alias de la table.

+0

Woops! Supprimé Merci encore Ponies. –

0

En fonction du commentaire, il semble que vous ayez besoin d'ajouter des alias à vos sous-requêtes. Je ne l'ai pas encore utilisé une base de données qui fait cela, mais je suppose que certains do:

SELECT username from (SELECT username, company, position FROM table1 WHERE username IN (SELECT username FROM members_network WHERE xscore <= 18 AND xscore >= 15) AS USERNAMES) AS USERDETAILS

Quelque chose comme ça devrait fonctionner (à moins que votre base de données a la syntaxe géniale alias).

+0

Merci Dan - problème résolu! –

Questions connexes