example - mysql falso seleccionar
order by descendente mysql (5)
Mi propósito es: obtener múltiples filas de una lista de valores, como (1,2,3,4,5), (''a'', ''b'', ''c'', ''cualquier cosa'') y así sucesivamente.
mysql> select id from accounts where id in (1,2,3,4,5,6);
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 5 |
| 6 |
+----+
5 rows in set (0.00 sec)
El sql anterior seguramente está bien, pero mi pregunta es: ¿hay alguna manera de obtener el mismo resultado sin
especificando una tabla? Porque mi propósito aquí es simplemente propagar filas por un id_set
otro ejemplo:
mysql> select now() as column1;
+---------------------+
| column1 |
+---------------------+
| 2009-06-01 20:59:33 |
+---------------------+
1 row in set (0.00 sec)
mysql>
Este ejemplo propagó un resultado de una sola fila sin especificar una tabla,
¿pero cómo propagar múltiples filas desde una cadena como (1,2,3,4,5,6)?
Algo como esto debería funcionar:
SELECT *
FROM (
SELECT 0 as id
UNION SELECT 1
UNION SELECT 2
UNION SELECT 3
UNION SELECT 4
UNION SELECT 5
)
Esto no responde exactamente a su pregunta, pero creo que esto solucionará su problema real.
SET @counter = 0; SELECCIONE (@counter: = @counter + 1 como contador) ... resto de su consulta
MySQL tiene una tabla ficticia: DUAL. pero usar DUAL no cambia nada (es solo por conveniencia), y ciertamente no hace que esta consulta funcione.
Estoy seguro de que hay una mejor manera de lograr lo que estás tratando de hacer. Es posible que podamos ayudarlo si explica su problema.
Una forma simple y pasada de moda es usar una tabla que contenga valores consecutivos.
DROP TABLE IF EXISTS `range10`;
CREATE TABLE IF NOT EXISTS `range10` (
`id` int(11) NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM;
INSERT INTO `range10` (`id`) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Una vez instalado, puede escribir consultas como se muestra a continuación.
obtener cada segunda fila:
select * from your_data_table where id in (
SELECT id*2 as id FROM `range10` WHERE id in(
select id from `range10`
)
)
obtener filas de 1101 a 1111:
select * from your_data_table where id in (
SELECT id+1100 as id FROM `range10` WHERE id in(
select id from `range10`
)
)
Entonces, si necesita mayores rangos, entonces simplemente aumente el tamaño de los valores consecutivos en el rango de tabla10. Las consultas son simples, los costos son bajos, no se necesita ningún procedimiento o función almacenada.
Nota:
También puede crear una tabla con valores de caracteres consecutivos. Pero variar los contenidos no sería tan fácil.
Una técnica que he encontrado invaluable es una "tabla de enteros" , que te permite hacer fácilmente todo tipo de cosas interesantes, incluida esta (xaprb ha escrito varias publicaciones en el blog sobre esta técnica y la "tabla mutex" estrechamente relacionada).