tl; dr 1 = 2 jest oceniane jako FAŁSZ dla wszystkich wierszy
Dennis Jaheruddin
28
To mały hack, aby uniknąć konieczności ponownego wpisywania całej struktury kolumny. Utworzy tabelę z tymi samymi nazwami kolumn i typami danych, ale bez kopiowania żadnych wierszy danych ani kluczy.
Adwaenyth
ten zapis 2 (dwa) znaki po wpisaniu „1 = 2”: 3 znaki, „Fałsz”: 5
znaków
1
Należy pamiętać, że nie jest to bynajmniej standardowy SQL. Działa w MySQL, nie jestem pewien co do innych dialektów.
Álvaro González
Odpowiedzi:
110
Ten typ polecenia jest zwykle używany do kopiowania struktury jednej tabeli do drugiej. W tym przypadku, EMPL_DEMObędzie miał taką samą konstrukcję kolumny employees, z wyjątkiem klawiszy lub ograniczenia .
1=2Zawsze ma wartość False, która uniemożliwia kopiowanie którymś z wierszy.
@ jpmc26 Myślę, że „identyczny” był złym wyborem. Miałem właśnie na myśli strukturę kolumn.
DrZoo
Zbuduje również wszelkie indeksy lub ograniczenia. Zasadniczo wykonasz kopię kolumn z odpowiednimi typami danych
Barranka
7
Jeśli chcesz skopiować wszystkie ograniczenia, indeksy itp., CREATE TABLE new_table LIKE old_table
Użyłbyś
1
@Barmar, chyba że to coś nowego, LIKE old_tablenie jest konstrukcją SQL Server ...
WernerCD
1
Myślę, że twoje znaczenie struktury kolumny jest słuszne namei typekolumny. Weź pod uwagę, że istnieją inne właściwości również jako struktura kolumny - np. Wartość domyślna, alias itp .;).
shA.t
27
CREATE TABLE (Utwórz nową tabelę)
EMPL_DEMO (Zadzwoniono do EMPL_DEMO)
AS (Z danymi i strukturą)
SELECT * FROM employees WHERE 1=2; (Wszystko w pracownikach, gdzie 1 = 2. Ponieważ 1 nigdy nie jest 2 - skopiuj strukturę i wszystkie 0 pasujących wierszy)
LIMIT ma pewną popularność, ale nie jest nigdzie zbliżony do standardu (niestety)
bgusach
1
@bgusach, jeeze, to jest takie szalone. Nie mogłem sobie wyobrazić, że jakikolwiek realistyczny DB nie mógłby mieć LIMIT. Ale wygląda na to, że MSSQL go nie ma (co wydaje mi się dobrym powodem, aby po prostu nie używać MSSQL). Najwyraźniej tak TOP, ale w wynikach Google jest tak wiele osób, które tego nie używają, więc prawdopodobnie wiąże się to z pewnym przeczuciem.
Kat.
@Kat Niektórzy to mają , wielu nie (w tym standardowy SQL). Co jest takiego specjalnego w tej specyficznej składni?
Álvaro González
Nie chodzi o składnię @ ÁlvaroGonzález, ale sama funkcjonalność jest dość krytyczna dla IMO. Może nie tak bardzo w tym przypadku (chociaż widzę to bardziej czytelne niż inne opcje), ale jest oczywiście przydatne do paginacji wyników. Kiedy wyszukałem „LIMIT MSSQL”, niektóre z obejść, które zauważyłem, sugerowane były szalone w przypadku funkcji, która wydaje się być integralną częścią SQL (byłem również zaskoczony, że nie jest to standardowe - kto może śledzić czy SQL nie jest tak pofragmentowany?).
Kat
7
Może to być przydatne do kopiowania struktury tabeli z wyłączeniem jej ograniczeń, kluczy, indeksów, właściwości tożsamości i wierszy danych.
To zapytanie utworzy EMPL_DEMOtabelę bez wierszy skopiowanych z tabeli pracowników, ponieważ WHERE 1=2warunek zawsze będzie oceniany jako FALSE.
CREATETABLE EMPL_DEMO
ASSELECT *
FROM employees
WHERE1=2;
Pamiętaj, że wyniki wyszukiwania Google są dostosowywane dla każdego użytkownika na podstawie tego, co Google o nim wie. Zatem kolejność wyników może być inna dla każdego, a w konsekwencji „pierwszy wynik” może być inny dla każdego. W moim przypadku najlepszym wynikiem dla tego zapytania jest to pytanie , a strona, do której prowadzi link, nie pojawia się nawet wśród trzech trafień.
użytkownik
2
Odwołując się do n-tego wyniku, użyj wyszukiwarki, takiej jak DuckDuckGo, która ma statyczne wyniki w czasie dla każdego zapytania.
wizzwizz4
@ MichaelKjörling Dawniej istniała opcja wyświetlania statycznych („niespersonalizowanych”) wyników. Nie wiem, jak dobrze to działało, gdy było w pobliżu, ale teraz zniknęło, ponieważ wydaje się, że dane użytkownika zostały tak powiązane z algorytmem PageRank.
@Mehrdad Drugi link mówi w sekcji „Usuń wszystkie wyniki niestandardowe”, że jednym z wymaganych kroków jest zalogowanie się na konto Google, więc jest to oczywiście niedostępne dla tych, którzy nie mają konta Google. Ponadto nazwa ustawienia wskazuje, że ma ono wpływ tylko na reklamy , a nie wyniki wyszukiwania, ale tekst sugeruje, że wpływa również na wyniki, więc jest to w najlepszym przypadku niejasne.
użytkownik
1
Wyrocznia:
CREATETABLE EMPL_DEMO ASSELECT * FROM employees WHERE1=2; //just structure not data
CREATETABLE EMPL_DEMO ASSELECT * FROM employees WHERE1=1; //ststructure and data
Lepsze zrozumienie w bazie danych Teradata:
CREATETABLE EMPL_DEMO AS Memployees withnodata; //structure
CREATETABLE EMPL_DEMO AS Memployees withdata; //structure and data
Odpowiedzi:
Ten typ polecenia jest zwykle używany do kopiowania struktury jednej tabeli do drugiej. W tym przypadku,
EMPL_DEMO
będzie miał taką samą konstrukcję kolumnyemployees
, z wyjątkiem klawiszy lub ograniczenia .1=2
Zawsze ma wartośćFalse
, która uniemożliwia kopiowanie którymś z wierszy.źródło
CREATE TABLE new_table LIKE old_table
LIKE old_table
nie jest konstrukcją SQL Server ...name
itype
kolumny. Weź pod uwagę, że istnieją inne właściwości również jako struktura kolumny - np. Wartość domyślna, alias itp .;).CREATE TABLE
(Utwórz nową tabelę)EMPL_DEMO
(Zadzwoniono do EMPL_DEMO)AS
(Z danymi i strukturą)SELECT * FROM employees WHERE 1=2;
(Wszystko w pracownikach, gdzie 1 = 2. Ponieważ 1 nigdy nie jest 2 - skopiuj strukturę i wszystkie 0 pasujących wierszy).. Zasadniczo kopiuj strukturę, a nie dane.
źródło
Ta składnia robi to samo, ale jest bardziej oczywiste, tworzy tabelę o tej samej strukturze, bez danych.
CREATE TABLE EMPL_DEMO AS SELECT * FROM employees limit 0;
źródło
LIMIT
. Ale wygląda na to, że MSSQL go nie ma (co wydaje mi się dobrym powodem, aby po prostu nie używać MSSQL). Najwyraźniej takTOP
, ale w wynikach Google jest tak wiele osób, które tego nie używają, więc prawdopodobnie wiąże się to z pewnym przeczuciem.Może to być przydatne do kopiowania struktury tabeli z wyłączeniem jej ograniczeń, kluczy, indeksów, właściwości tożsamości i wierszy danych.
To zapytanie utworzy
EMPL_DEMO
tabelę bez wierszy skopiowanych z tabeli pracowników, ponieważWHERE 1=2
warunek zawsze będzie oceniany jakoFALSE
.CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2;
źródło
Zaufaj Google, przyjacielu. Od dołu pierwszego wyniku po wygooglowaniu tego stwierdzenia :
źródło
Wyrocznia:
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
Lepsze zrozumienie w bazie danych Teradata:
CREATE TABLE EMPL_DEMO AS Memployees with no data; //structure CREATE TABLE EMPL_DEMO AS Memployees with data; //structure and data
źródło
W SQL Server
wybierz * do tabeli1 z tabeli2, gdzie 1 = 2 (tylko struktura)
wybierz * do tabeli1 z tabeli2, gdzie 1 = 1 (Struktura z danymi)
źródło