tl; dr 1 = 2 wird für alle Zeilen als FALSE bewertet
Dennis Jaheruddin
27
Es ist ein kleiner Hack, um zu vermeiden, dass die gesamte Spaltenstruktur erneut eingegeben werden muss. Es wird eine Tabelle mit denselben Spaltennamen und Datentypen erstellt, ohne jedoch Datenzeilen oder Schlüssel zu kopieren.
Adwaenyth
Dies spart 2 (zwei) Zeichen, wenn "1 = 2" eingegeben wird: 3 Zeichen, "Falsch": 5
Zeichen
1
Bitte beachten Sie, dass dies keineswegs Standard-SQL ist. Es funktioniert in MySQL, nicht sicher über andere Dialekte.
Álvaro González
Antworten:
108
Diese Art von Befehl wird normalerweise verwendet, um die Struktur einer Tabelle in eine andere zu kopieren. In diesem Fall EMPL_DEMOhat die gleiche Spaltenstruktur von employees, mit Ausnahme der Schlüssel oder Einschränkungen .
Das wird 1=2immer ausgewertet, Falsewodurch verhindert wird, dass Sie eine der Zeilen kopieren.
@ jpmc26 Ich denke "identisch" war eine schlechte Wahl. Ich bezog mich nur auf die Spaltenstruktur.
DrZoo
Es werden auch keine Indizes oder Einschränkungen angezeigt. Im Wesentlichen werden Sie eine Kopie der Spalten mit den entsprechenden Datentypen
erstellen
7
Wenn Sie auch alle Einschränkungen, Indizes usw. kopieren möchten, würden SieCREATE TABLE new_table LIKE old_table
Barmar
1
@Barmar, es sei denn, es ist etwas Neues, LIKE old_tableist kein SQL Server-Konstrukt ...
WernerCD
1
Ich denke, Ihre Bedeutung der Spaltenstruktur ist gerecht nameund typeder Spalte. Bedenken Sie, dass es einige andere Eigenschaften gibt, die auch als Spaltenstruktur gelten - z. B. Standardwert, Alias usw.;).
shA.t
27
CREATE TABLE (Neue Tabelle erstellen)
EMPL_DEMO (EMPL_DEMO genannt)
AS (Mit den Daten und der Struktur von)
SELECT * FROM employees WHERE 1=2; (Alles in Mitarbeitern mit 1 = 2. Da 1 niemals 2 ist - kopieren Sie die Struktur und alle 0 übereinstimmenden Zeilen)
Kopieren Sie im Wesentlichen die Struktur und nicht die Daten.
LIMIT hat einige Popularität, aber es ist (leider) nicht annähernd ein Standard
bgusach
1
@bgusach, jeeze, das ist so verrückt. Ich konnte mir nicht vorstellen, dass es eine realistische DB möglicherweise nicht geben könnte LIMIT. Aber es scheint, dass MSSQL es nicht hat (was mir als guter Grund erscheint, MSSQL einfach nicht zu verwenden). Anscheinend haben sie TOP, aber Google-Ergebnisse haben so viele Leute, die das nicht verwenden, also gibt es wahrscheinlich einige Hijink, die es umgeben.
Kat
@Kat Einige haben es , viele andere nicht (einschließlich Standard-SQL). Was ist das Besondere an dieser speziellen Syntax?
Álvaro González
Es geht nicht um die Syntax, @ ÁlvaroGonzález, aber die Funktionalität selbst ist IMO ziemlich kritisch. Vielleicht nicht so sehr für diesen Fall (obwohl ich es besser lesbar sehe als die anderen Optionen), aber es ist offensichtlich nützlich für die Paginierung von Ergebnissen. Als ich nach "MSSQL LIMIT" suchte, waren einige der vorgeschlagenen Problemumgehungen verrückt nach einer Funktion, die sich als integraler Bestandteil von SQL anfühlt (ich war auch überrascht, dass sie nicht Standard war - wer kann verfolgen, was ist und was? ist SQL nicht so fragmentiert?).
Kat
7
Dies kann nützlich sein, um die Struktur einer Tabelle ohne deren Einschränkungen, Schlüssel, Indizes, Identitätseigenschaften und Datenzeilen zu kopieren .
Diese Abfrage erstellt eine EMPL_DEMOTabelle ohne Zeilen, die aus der Mitarbeitertabelle kopiert wurden, da die WHERE 1=2Bedingung immer als ausgewertet wird FALSE.
CREATETABLE EMPL_DEMO
ASSELECT *
FROM employees
WHERE1=2;
CREATETABLE suppliers
AS (SELECT *
FROM companies WHERE1=2);
Dies würde eine neue Tabelle mit dem Namen Lieferanten erstellen, die alle Spalten aus der Unternehmenstabelle, jedoch keine Daten aus der Unternehmenstabelle enthält.
Beachten Sie, dass die Google-Suchergebnisse für jeden Nutzer angepasst werden, je nachdem, was Google über den Nutzer weiß. Daher ist die Reihenfolge der Ergebnisse wahrscheinlich für alle unterschiedlich, und folglich besteht die Gefahr, dass "das erste Ergebnis" für alle unterschiedlich ist. In meinem Fall ist das beste Ergebnis für diese Abfrage diese Frage , und die Seite, auf die Sie verlinken, wird nicht einmal unter den drei Treffern angezeigt.
Benutzer
2
Verwenden Sie beim Verweisen auf das n-te Ergebnis eine Suchmaschine wie DuckDuckGo , die für jede Abfrage im Laufe der Zeit statische Ergebnisse liefert.
wizzwizz4
@ MichaelKjörling Früher gab es eine Option, um statische ("nicht personalisierte") Ergebnisse anzuzeigen. Ich weiß nicht, wie gut es funktioniert hat, als es da war, aber es ist jetzt weg, da es den Anschein hat, dass Benutzerdaten so stark mit dem PageRank-Algorithmus verflochten sind.
@Mehrdad Der zweite Link besagt unter "Alle benutzerdefinierten Ergebnisse entfernen", dass einer der erforderlichen Schritte darin besteht, sich bei Ihrem Google-Konto anzumelden, sodass dies offensichtlich nicht für diejenigen verfügbar ist, die kein Google-Konto haben. Der Name der Einstellung gibt außerdem an, dass nur Anzeigen und keine Suchergebnisse betroffen sind. Der Text weist jedoch darauf hin, dass sich dies auch auf die Ergebnisse auswirkt, sodass dies bestenfalls unklar ist.
Benutzer
1
Orakel:
CREATETABLE EMPL_DEMO ASSELECT * FROM employees WHERE1=2; //just structure not data
CREATETABLE EMPL_DEMO ASSELECT * FROM employees WHERE1=1; //ststructure and data
Besseres Verständnis in der Teradata-Datenbank:
CREATETABLE EMPL_DEMO AS Memployees withnodata; //structure
CREATETABLE EMPL_DEMO AS Memployees withdata; //structure and data
Antworten:
Diese Art von Befehl wird normalerweise verwendet, um die Struktur einer Tabelle in eine andere zu kopieren. In diesem Fall
EMPL_DEMO
hat die gleiche Spaltenstruktur vonemployees
, mit Ausnahme der Schlüssel oder Einschränkungen .Das wird
1=2
immer ausgewertet,False
wodurch verhindert wird, dass Sie eine der Zeilen kopieren.quelle
CREATE TABLE new_table LIKE old_table
LIKE old_table
ist kein SQL Server-Konstrukt ...name
undtype
der Spalte. Bedenken Sie, dass es einige andere Eigenschaften gibt, die auch als Spaltenstruktur gelten - z. B. Standardwert, Alias usw.;).CREATE TABLE
(Neue Tabelle erstellen)EMPL_DEMO
(EMPL_DEMO genannt)AS
(Mit den Daten und der Struktur von)SELECT * FROM employees WHERE 1=2;
(Alles in Mitarbeitern mit 1 = 2. Da 1 niemals 2 ist - kopieren Sie die Struktur und alle 0 übereinstimmenden Zeilen)Kopieren Sie im Wesentlichen die Struktur und nicht die Daten.
quelle
Diese Syntax macht dasselbe, aber es ist offensichtlicher, dass sie eine Tabelle mit derselben Struktur ohne Daten erstellt.
CREATE TABLE EMPL_DEMO AS SELECT * FROM employees limit 0;
quelle
LIMIT
. Aber es scheint, dass MSSQL es nicht hat (was mir als guter Grund erscheint, MSSQL einfach nicht zu verwenden). Anscheinend haben sieTOP
, aber Google-Ergebnisse haben so viele Leute, die das nicht verwenden, also gibt es wahrscheinlich einige Hijink, die es umgeben.Dies kann nützlich sein, um die Struktur einer Tabelle ohne deren Einschränkungen, Schlüssel, Indizes, Identitätseigenschaften und Datenzeilen zu kopieren .
Diese Abfrage erstellt eine
EMPL_DEMO
Tabelle ohne Zeilen, die aus der Mitarbeitertabelle kopiert wurden, da dieWHERE 1=2
Bedingung immer als ausgewertet wirdFALSE
.CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2;
quelle
Vertraue auf Google, mein Freund. Am Ende des ersten Ergebnisses, wenn Sie diese Aussage googeln :
quelle
Orakel:
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
Besseres Verständnis in der Teradata-Datenbank:
CREATE TABLE EMPL_DEMO AS Memployees with no data; //structure CREATE TABLE EMPL_DEMO AS Memployees with data; //structure and data
quelle
In SQL Server
Wählen Sie * in Tabelle1 aus Tabelle2 aus, wobei 1 = 2 (nur Struktur)
Wählen Sie * in Tabelle1 aus Tabelle2 aus, wobei 1 = 1 (Struktur mit Daten)
quelle