开发者社区> 问答> 正文

在不使用类型的情况下删除SQL查询中的查询

我创建了两个表,其中一个具有原始类型:

CREATE TABLE CARDS_BAD ( suit CHAR(1), rank VARCHAR(2) ); 另一个具有用户定义的类型

CREATE TYPE suits AS ENUM ('♣', '♠', '♥', '♦');
CREATE TYPE ranks AS ENUM ('2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K', '10', 'A');

CREATE TABLE CARDS_GOOD ( suit suits, rank ranks ); 如您所见,这两个表将包含扑克牌组,使用简单INSERT查询即可添加纸牌。当我尝试从两个表中删除等级7或更低的所有卡时:

DELETE FROM cards_bad t where t.rank < '7'; DELETE FROM cards_good t where t.rank < '7'; 该查询工作正常,cards_good但也删除了排名10为的卡片cards_bad,但我希望结果是相同的。有人可以向我解释为什么不同吗?也可以说我想将INSERT一张JOKER牌放进牌组(等级为Jo但没有套牌),为什么这不起作用?

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-15 17:33:12 600 0
1 条回答
写回答
取消 提交回答
  • 这些表之间有一个明显的区别:cards_good依靠枚举类型存储ranks,而cards_bads使用varchar()。

    在进行字符串比较时'10' < '7',因为'10'始于'1',所以小于'7'。

    另一方面,虽然enum在您的用例中比较s似乎可行,但我不能保证可以始终如一地工作。

    一个可能更安全的选择是创建一个查找表,为每个表显式分配一个(数字)权重rank。

    在百搭牌上,它具有等级,但不适合:就suit您而言,表中的必填列不是必填列,因此,没有什么可以阻止您插入suit设置为的卡null。

    2019-11-15 17:33:47
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载