2014-09-23 25 views
10

Bir listeden verilen değerleri seçip satırları doldurabilir miyim diye merak ediyordum? Örneğin, SELECT 1 as one, 2 as two, 3 as three sütunları dolduracaktır:MySQL: Değerler listesinden seçim yapın

one | two | three 
------------------------ 
1  | 2  | 3 

bir şey gibi satırları, doldurur bir komut dosyası için arıyorum:

values 
------- 
1 
2 
3 
4 

teşekkür!

cevap

12

Birleştiğinizi her bir sen başka sütuna yerleştirin ... yani

SELECT 1 AS numbers 
UNION SELECT 2 
UNION SELECT 3 

bu bir oto ile bir tablo id artırılır yapmak olacaktır böyle bir şey yapmak çok daha basit bir yolu gibi istersem tablo boş bir dize ... sonra birkaç numara almak için, John Ruddell gelen yaklaşım muhtemelen otomatik artırılır kimliği

CREATE TEMPORARY TABLE tmp (
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    val varchar(1) 
); 
INSERT INTO tmp (val) 
values 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""), 
(""); 
select id from tmp; 

DEMO

+0

Dizi benzeri bir işlev var mı? SELECT LIST (1,2,3) AS numaraları '. – bodruk

+1

@drux no SQL'in dizi işlevi yoktur. Temel olarak diziler olarak kullanabileceğiniz tabloları vardır. –

+0

Gotcha! Teşekkürler, @John Rudell. – bodruk

2

seçmek En uygun şekilde, çalıştırmaya ihtiyacım olan herhangi bir sorguda kolayca bir satır içi görünüm ekleyebilirim. İhtiyacım sayıların sınırları' hizmet etmeyen

CREATE TABLE digit (d INT(11) NOT NULL PRIMARY KEY); 
INSERT INTO digit (d) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); 

SELECT thousands.d*1000+hundreds.d*100+tens.d*10+ones.d+1 AS n 
    FROM digit ones 
CROSS 
    JOIN digit tens 
CROSS 
    JOIN digit hundreds 
CROSS 
    JOIN digit thousands 
WHERE thousands.d < 4 

Ben de bir HAVING maddesini ekleyebilirsiniz: Ben örneğin sayıların çok, gerektiğinde

, 1 4000 ile, böyle bir şey yapabilirsiniz

ORDER BY n 
: t oldukça gibi düzgün, örneğin

ben "numaralarını" sağlamak istiyorsanız sırayla döndürülür
HAVING n >= 121 
    AND n <= 2499 

, bir ORDER BY maddesini ekleyeceğiz

İlgili konular