gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:09:08 25 4
gpt4 key购买 nike

我创建了两个表,一个是原始类型:

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 上正常工作,但也会删除 cards_bad 中等级为 10 的卡片,但我希望结果相同。有人可以向我解释为什么不同吗?另外假设我想INSERT一张JOKER卡到牌组中(它有等级Jo但没有花色),为什么这不起作用?

最佳答案

表之间存在明显差异:cards_good依赖枚举类型来存储 rank s,而cards_bads使用 varchar() .

做字符串比较时,'10' < '7' ,因为 '10''1' 开头,小于 '7' .

另一方面,比较enum s 似乎适用于您的用例,但我不保证它可以始终如一地工作。

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


在 clown 牌上,有等级,但没有花色:就关注而言,suit不是您表中的必填列,因此没有什么可以阻止您插入带有 suit 的卡设置为 null .

关于mysql - 在不使用类型的情况下删除 SQL 查询中的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58873007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com