2009-03-23 5 views
0

Je veux sélectionner au moins 20 enregistrements d'une table dans une nouvelle table basée sur un nombre de 1 à 20.SQL: sélectionner plusieurs enregistrements dans une nouvelle table

select * into blah from foo where fubar = '1' 

Comment puis-je ajouter 1 à 20 dans cette déclaration?

modifier:

select * into blah from foo where fubar = '1' and where fubar = '2' and where fubar = '3' 

Désolé. Laissez-moi voir si je peux le rendre plus clair. Fondamentalement, je veux sélectionner 20 enregistrement basé sur fubar = 1 à 20. J'ai essayé d'utiliser "et où" mais je reçois une erreur de syntaxe.

Eidt: si fubar est nvarchar (11)

+0

pouvez-vous donner plus de détails? ce numéro 1-20 - est-ce dans le tableau? –

+0

SÉLECTIONNEZ TOP 20 * DANS bla FROM foo WHERE fubar = '1' –

+0

Quelle base de données utilisez-vous? –

Répondre

0
select top 20 * into blah from foo where fubar = '1' 

Je ne suis pas vraiment sûr de ce que vous demandez bien.

EDIT:

select top 20 * into blah from foo where fubar IN ('1','2',...'20') 
0

Vous regardant simplement d'insérer les 20 premiers dossiers?

SELECT TOP 20 * 
INTO 
    blah 
FROM 
    foo 
WHERE 
    fubar = '1' 

Il y a aussi plusieurs façons que vous pouvez parameterize the TOP clause aussi (les exemples sont pour SQL Server).

EDIT:

En réponse à votre mise à jour, si la colonne fubar est numérique, il est tout simplement

SELECT * INTO blah FROM foo WHERE fubar BETWEEN 1 AND 20 

si fubar est un champ de caractères, mais contient des chiffres, alors vous pouvez lancer le champ Integer et toujours utiliser la clause BETWEEN

SELECT * INTO blah FROM foo WHERE CAST(fubar AS INT) BETWEEN 1 AND 20 

Ceci est pour SQL Server

6

Si votre premier nom de table est "foo" et le nouveau nom de la table "blah"

SELECT * INTO blah FROM foo WHERE fubar BETWEEN 1 AND 20 

ou

SELECT * INTO blah FROM foo WHERE fubar >= 1 AND fubar <=20 
+0

mis à jour avec le second .. soit l'un fonctionne – TStamper

+0

+1 pour avoir la même réponse que moi et ne sachant pas qui l'a posté en premier. – gpojd

1

Deux méthodes ringard à la fois concernant la modification de la clause where :

Si fubar est une colonne numérique, essayez où fubar> 0 et fubar si fubar est une colonne de caractères essayez où fubar dans ('1', '2', '3', ... '19', '20')

Je suis sûr qu'il existe des méthodes plus efficaces que sont généraux, mais cela pourrait vous aider dans une circonstance particulière.

+0

Je pense que vos méthodes cheesy est ce que je cherche. Remercier. Je suis impatient de voir si quelqu'un peut se permettre une meilleure déclaration. – Jack

0

Cela dépend de la base de données que vous utilisez. Pour MS SQL Server, il sera

SELECT TOP 20 * into blah from foo order by fubar 

Pour Oracle

SELECT * into blah from foo order by fubar where rownum()<=20 
6
SELECT * INTO blah FROM foo WHERE fubar BETWEEN 1 AND 20 
+0

Je suis tellement fou que vous avez des votes pour la réponse que j'ai mis en premier :(... j/k – TStamper

+0

cela ne fonctionnera pas pour les champs nvarchar –

+0

@rm: L'OP a dit "basé sur un nombre de 1 à 20", donc Je pense que cela devrait marcher pour lui – gpojd

0

Changez votre « ET » à un 'OU':

select * into blah 
from foo 
where fubar = 1 
OR fubar = 2 
OR fubar = 3 
0

Si fubar est vraiment 1 à 20 entier (ou autre type de nombre), mais stocké dans nvarchar(), alors j'utiliserais BETWEEN comme @ TStamper dit et comme @Russ Cam suggéré avec t Il CAST (fubar comme Int), si vous êtes en MSSQL ou MySQL.

Contrairement à ce que vous voulez dire, mais ... si vous dites que fubar peut être un nvarchar, et vous cherchez vraiment à avoir des valeurs non-numériques qui sont testées, l'IN ('1', 'x', ' 5679fjdk ', etc ...) serait probablement nécessaire.

Questions connexes