tl; dr 1 = 2 se evalúa como FALSO para todas las filas
Dennis Jaheruddin
27
Es un pequeño truco para evitar tener que volver a escribir toda la estructura de la columna. Creará una tabla con los mismos nombres de columna y tipos de datos, pero sin copiar ninguna fila o clave de datos.
Adwaenyth
esto guarda 2 (dos) caracteres cuando se escribe "1 = 2": 3 caracteres, "Falso": 5 caracteres
Archemar
1
Tenga en cuenta que esto no es de ninguna manera SQL estándar. Funciona en MySQL, no estoy seguro de otros dialectos.
Álvaro González
Respuestas:
109
Este tipo de comando se suele utilizar para copiar la estructura de una tabla a otra. En este caso, EMPL_DEMOtendrá la misma estructura de columnas que employees, excepto las claves o restricciones .
El 1=2da siempre como resultado Falseque le impide la copia de cualquiera de las filas.
@ jpmc26 Supongo que "idéntico" fue una mala elección. Solo me refería a la estructura de la columna.
DrZoo
También incluirá índices o restricciones. Básicamente, hará una copia de las columnas con los tipos de datos apropiados
Barranka
7
Si también quisiera copiar todas las restricciones, índices, etc., usaríaCREATE TABLE new_table LIKE old_table
Barmar
1
@Barmar a menos que sea algo nuevo, LIKE old_tableno es una construcción de SQL Server ...
WernerCD
1
Creo que su significado de estructura de columna es justo namey typede columna. Tenga en cuenta que hay otras propiedades también como estructura de columna , por ejemplo, valor predeterminado, alias, etc.;).
shA.t
27
CREATE TABLE (Crear una tabla nueva)
EMPL_DEMO (Llamado EMPL_DEMO)
AS (Con los datos y estructura de)
SELECT * FROM employees WHERE 1=2; (Todo en los empleados donde 1 = 2. Dado que 1 nunca es 2, copie la estructura y las 0 filas coincidentes)
..Esencialmente copia la estructura y no los datos.
LÍMITE tiene cierta popularidad, pero no está ni cerca de una norma (por desgracia)
bgusach
1
@bgusach, jeeze, eso es una locura. No podía imaginar que cualquier DB realista no pudiera tenerlo LIMIT. Pero parece que MSSQL carece de él (lo que me parece una buena razón para no usar MSSQL). Aparentemente lo han hecho TOP, pero los resultados de Google tienen a tanta gente que no usa eso, por lo que probablemente haya algunas tonterías en torno a esto.
Kat
@Kat Algunos lo tienen , muchos otros no (incluido SQL estándar). ¿Qué tiene de especial esta sintaxis específica?
Álvaro González
No se trata de la sintaxis, @ ÁlvaroGonzález, pero la funcionalidad en sí es bastante crítica en mi opinión. Quizás no tanto para este caso (aunque lo veo más legible que las otras opciones), pero obviamente es útil para la paginación de resultados. Cuando busqué "MSSQL LIMIT", algunas de las soluciones que vi sugeridas estaban locas por una característica que se siente como una parte integral de SQL (también me sorprendió que no fuera estándar, quién puede realizar un seguimiento de lo que es y ¿No está tan fragmentado con SQL?).
Kat
7
Esto puede ser útil para copiar la estructura de una tabla excluyendo sus restricciones, claves, índices, propiedad de identidad y filas de datos.
Esta consulta creará una EMPL_DEMOtabla sin filas copiadas de la tabla de empleados, ya que la WHERE 1=2condición siempre se evaluará como FALSE.
CREATETABLE EMPL_DEMO
ASSELECT *
FROM employees
WHERE1=2;
Tenga en cuenta que los resultados de búsqueda de Google están personalizados para cada usuario, en función de lo que Google sepa sobre el usuario. Por lo tanto, es probable que el orden de los resultados sea diferente para todos y, en consecuencia, "el primer resultado" corre el riesgo de ser diferente para todos. En mi caso, el resultado principal para esa consulta es esta pregunta , y la página a la que enlaza ni siquiera aparece entre los tres resultados.
usuario
2
Al hacer referencia al enésimo resultado, use un motor de búsqueda como DuckDuckGo que tiene resultados estáticos a lo largo del tiempo para cada consulta.
wizzwizz4
@ MichaelKjörling Solía haber una opción para mostrar resultados estáticos ("no personalizados"). No sé qué tan bien funcionó cuando estaba disponible, pero ya no está, ya que parece que los datos del usuario se han entrelazado tanto con el algoritmo de PageRank.
@Mehrdad El segundo enlace dice en "Eliminar todos los resultados personalizados" que uno de los pasos necesarios es iniciar sesión en su cuenta de Google, por lo que obviamente no está disponible para aquellos que no tienen una cuenta de Google. Además, el nombre de la configuración indica que solo afecta a los anuncios , no a los resultados de la búsqueda, pero el texto indica que también afecta a los resultados, por lo que, en el mejor de los casos, no está claro.
usuario
1
Oráculo:
CREATETABLE EMPL_DEMO ASSELECT * FROM employees WHERE1=2; //just structure not data
CREATETABLE EMPL_DEMO ASSELECT * FROM employees WHERE1=1; //ststructure and data
Mejor comprensión en la base de datos de Teradata:
CREATETABLE EMPL_DEMO AS Memployees withnodata; //structure
CREATETABLE EMPL_DEMO AS Memployees withdata; //structure and data
Respuestas:
Este tipo de comando se suele utilizar para copiar la estructura de una tabla a otra. En este caso,
EMPL_DEMO
tendrá la misma estructura de columnas queemployees
, excepto las claves o restricciones .El
1=2
da siempre como resultadoFalse
que le impide la copia de cualquiera de las filas.fuente
CREATE TABLE new_table LIKE old_table
LIKE old_table
no es una construcción de SQL Server ...name
ytype
de columna. Tenga en cuenta que hay otras propiedades también como estructura de columna , por ejemplo, valor predeterminado, alias, etc.;).CREATE TABLE
(Crear una tabla nueva)EMPL_DEMO
(Llamado EMPL_DEMO)AS
(Con los datos y estructura de)SELECT * FROM employees WHERE 1=2;
(Todo en los empleados donde 1 = 2. Dado que 1 nunca es 2, copie la estructura y las 0 filas coincidentes)..Esencialmente copia la estructura y no los datos.
fuente
Esta sintaxis hace lo mismo, pero es más obvio, crea una tabla con la misma estructura, sin datos.
CREATE TABLE EMPL_DEMO AS SELECT * FROM employees limit 0;
fuente
LIMIT
. Pero parece que MSSQL carece de él (lo que me parece una buena razón para no usar MSSQL). Aparentemente lo han hechoTOP
, pero los resultados de Google tienen a tanta gente que no usa eso, por lo que probablemente haya algunas tonterías en torno a esto.Esto puede ser útil para copiar la estructura de una tabla excluyendo sus restricciones, claves, índices, propiedad de identidad y filas de datos.
Esta consulta creará una
EMPL_DEMO
tabla sin filas copiadas de la tabla de empleados, ya que laWHERE 1=2
condición siempre se evaluará comoFALSE
.CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2;
fuente
Confía en Google, amigo. Desde la parte inferior del primer resultado cuando buscas en Google esa declaración :
fuente
Oráculo:
CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2; //just structure not data CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=1; //ststructure and data
Mejor comprensión en la base de datos de Teradata:
CREATE TABLE EMPL_DEMO AS Memployees with no data; //structure CREATE TABLE EMPL_DEMO AS Memployees with data; //structure and data
fuente
En SQL Server
seleccione * en la tabla1 de la tabla2 donde 1 = 2 (solo estructura)
seleccione * en la tabla1 de la tabla2 donde 1 = 1 (Estructura con datos)
fuente