为什么在SQL CREATE TABLE语法中使用"where 1 = 2"?

Omi*_*wal 77 sql

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2;
Run Code Online (Sandbox Code Playgroud)

我在互联网上的某处读到了这个声明,但我无法理解WHERE 1=2.

有人请,解释一下吗?

DrZ*_*Zoo 105

这种类型的命令通常用于将一个表的结构复制到另一个表.在这种情况下,EMPL_DEMO将具有相同的柱状结构employees,除了键或约束.

1=2结果始终为False防止您复制任何行.

  • 如果你想复制所有约束,索引等,你可以使用`CREATE TABLE new_table LIKE old_table` (7认同)
  • @ jpmc26我猜"相同"是一个糟糕的选择.我只是指柱结构. (2认同)

Faz*_*r87 26

CREATE TABLE (创建一个新表)

EMPL_DEMO (名为EMPL_DEMO)

AS (有了数据和结构)

SELECT * FROM employees WHERE 1=2; (员工中的一切,其中1 = 2.由于1永远不是2 - 复制结构和所有0匹配行)

..实际上复制结构而不是数据.


fra*_*aff 14

这种语法也是如此,但更明显的是,它创建了一个具有相同结构的表,没有数据.

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees limit 0;
Run Code Online (Sandbox Code Playgroud)

  • LIMIT有一定的受欢迎程度,但它没有接近标准(不幸的是) (2认同)

mr_*_*air 7

这对于复制表的结构(包括约束,键,索引,标识属性和数据行)非常有用.

此查询将创建EMPL_DEMO没有从employees表复制的行的表,因为WHERE 1=2条件始终将被评估为FALSE.

  CREATE TABLE EMPL_DEMO 
  AS 
  SELECT * 
  FROM employees 
  WHERE 1=2;
Run Code Online (Sandbox Code Playgroud)


小智 6

信任谷歌,我的朋友.从谷歌那个声明的第一个结果的底部:

例如:

CREATE TABLE suppliers
  AS (SELECT *
    FROM companies WHERE 1=2);
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为供应商的新表,其中包含公司表中的所有列,但没有来自公司表的数据.

  • 请注意,Google搜索结果是根据Google恰好了解用户的内容为每位用户自定义的.因此,每个人的结果排序可能会有所不同,因此,"第一个结果"可能会因人而异.在我的情况下,该查询的最高结果是*这个问题*,并且您链接到的页面甚至没有显示在三个匹配中. (41认同)
  • 在引用第n个结果时,使用像[DuckDuckGo](https://duckduckgo.com)这样的搜索引擎,该搜索引擎随着时间的推移对每个查询都有静态结果. (2认同)