Soy nuevo en SQL.
tengo una consulta como
select * from mytable order by 1 desc limit 2Si mytable tiene solo 1 fila, esta consulta devolverá esa fila. ¿Cómo puedo asegurarme de que mi consulta siempre devuelva 2 resultados y si mytable tiene 1 fila devolverá NULL?
Esa es mi primera pregunta aquí, lo siento por mi inglés.
Podrías intentar usar un truco de unión aquí:
SELECT col1, col2, col3 FROM ( SELECT col1, col2, col3, 1 AS priority FROM mytable UNION ALL SELECT NULL, NULL, NULL, 2 UNION ALL SELECT NULL, NULL, NULL, 2 ) t ORDER BY priority, col1 LIMIT 2;La estrategia anterior es incluir a través de la unión dos registros "vacíos". Sin embargo, estos registros vacíos solo aparecerán en el conjunto de resultados en caso de que su tabla tenga menos de 2 registros.
Si tiene un montón de columnas y no quiere enumerarlas, puede usar esta variación en la respuesta de Tim:
select t.* from mytable t union all select t.* from (select 1 as n union all select 2 as n) left join mytable t on 1 = 0; -- always false order by col1 desc limit 2; El ordenamiento descendente pone primero los valores que no son NULL . Esto supone que col1 no es NULL , por lo que las filas válidas son las primeras.
Notas: