【问题标题】:query for creating view查询创建视图
【发布时间】:2020-05-16 21:39:34
【问题描述】:

这是我的代码:

create DATABASE assignment

CREATE TABLE Books (
    id INTEGER PRIMARY KEY,
    category TEXT,
    price FLOAT CHECK (price>0), 
    promoted bit DEFAULT 1
);

INSERT INTO Books (id, category, price) VALUES (1, 'Dictionary', 100); 
INSERT INTO Books (id, category, price) VALUES (2, 'Dictionary', 150); 
INSERT INTO Books (id, category, price) VALUES (3, 'Science', 120); 
INSERT INTO Books (id, category, price) VALUES (4, 'Science', 190); 
INSERT INTO Books  (id, category, price) VALUES (5, 'Science', 320);

CREATE VIEW PromotionSummary AS
SELECT category, MIN(price) AS minprice , MAX(price) AS maxprice 
FROM Books
WHERE promoted
GROUP BY category;

面临这个错误:

Msg 4145,Level 15,State 1,Procedure PromotionSummary,第 5 行 在预期条件的上下文中指定的非布尔类型表达式,靠近“GROUP”。

我现在正在使用 azure 数据库。

【问题讨论】:

  • MySQL 不是 SQL Server - 使用正确的引擎参考!
  • 位数据类型可以与符号 b'n' 一起使用。在您的情况下,它将是 WHERE Promotion = b'1' 为真。 dev.mysql.com/doc/refman/8.0/en/bit-type.html 如果您尝试 BOOLEAN,它显然会自动将 true 和 false 转换为 1 和 0;我对布尔数据类型 (mysqltutorial.org/mysql-boolean) 更有信心,但我认为两者都可以工作。其他一切看起来都不错。
  • 旁白:SQL Server 支持bit 数据类型。 (有效值为 0、1、'TRUE' 和 'FALSE'。)有一个 boolean 数据类型(值为 TRUE、FALSE 和 UNKNOWN),但您无法牢牢把握其中一个:“不像其他 SQL Server数据类型,Boolean数据类型不能指定为表列或变量的数据类型,不能在结果集中返回。"

标签: sql sql-server tsql azure-sql-database


【解决方案1】:

错误消息表明您使用的是 SQL Server,而不是 MySQL。如果是这样,那么您需要在 promoted 上的谓词上设置一个值(MySQL 允许这样做,但 SQL Server 不允许)。大概,你想要:

CREATE VIEW PromotionSummary AS 
SELECT category, MIN(price) AS minprice , MAX(price) AS maxprice 
FROM Books 
WHERE promoted = 1 
GROUP BY category;

【讨论】:

  • @tatemallies:只是不要使用数据类型textnvarchar(...) 更好。 text 是一个旧数据类型,计划弃用,如 explained in the documentation
  • @tatemallies:不,那是在你的表的定义中。列category 应定义为varchar() 而不是text,如CREATE TABLE Books ( id INTEGER PRIMARY KEY, category VARCHAR(50), price FLOAT CHECK (price>0), promoted bit DEFAULT 1 );
  • @GMB 。 . . text(等等)已经被弃用了。这意味着它们计划在未来被移除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多