Sql 随机扑克牌生成器优化

Sql 随机扑克牌生成器优化,sql,oracle,Sql,Oracle,下面是我在一个随机的扑克牌生成器尝试随机挑选一张牌 (将试图在以后的日子里增加不同的卡牌限制,并可能将其转换为基于快照的游戏,这将使游戏变得更加复杂) 我想知道是否有人有任何优化此查询的提示,或者我使用过的任何不良做法 -- Higher or Lower -- Deck of Cards WITH CardNumber AS ( SELECT 1 col1, 'ACE' col2 FROM dual UNION AL

下面是我在一个随机的扑克牌生成器尝试随机挑选一张牌 (将试图在以后的日子里增加不同的卡牌限制,并可能将其转换为基于快照的游戏,这将使游戏变得更加复杂)

我想知道是否有人有任何优化此查询的提示,或者我使用过的任何不良做法

-- Higher or Lower
-- Deck of Cards

WITH CardNumber AS
                (
                    SELECT 1 col1, 'ACE' col2   FROM dual UNION ALL
                    SELECT 2, 'Two'             FROM dual UNION ALL
                    SELECT 3, 'Three'           FROM dual UNION ALL
                    SELECT 4, 'Four'            FROM dual UNION ALL
                    SELECT 5, 'Five'            FROM dual UNION ALL
                    SELECT 6, 'Six'             FROM dual UNION ALL
                    SELECT 7, 'Seven'           FROM dual UNION ALL
                    SELECT 8, 'Eight'           FROM dual UNION ALL
                    SELECT 9, 'Nine'            FROM dual UNION ALL
                    SELECT 10, 'Jack'           FROM dual UNION ALL
                    SELECT 11, 'Queen'          FROM dual UNION ALL
                    SELECT 12, 'King'           FROM dual
                ) -- Assigns Card Number
                ,
CardType AS     (
                    SELECT 1 col1,'Spades' col2 FROM dual UNION ALL
                    SELECT 2,'Hearts'           FROM dual UNION ALL
                    SELECT 3,'Diamonds'         FROM dual UNION ALL
                    SELECT 4,'Clubs'            FROM dual  
                ) -- Assigns Card Type

-- Draw card
SELECT
            (
                            SELECT b.col2
                            FROM(
                                    SELECT CARD,tank
                                    FROM    (   SELECT CARD,
                                                RANK () OVER(ORDER BY CARD DESC) tank
                                                FROM
                                                        (
                                                            SELECT floor(dbms_random.value(1,12)) CARD
                                                            FROM dual
                                                        ) abc
                                            ) b
                                ) A
                            INNER JOIN CardNumber b
                            ON A.CARD = b.col1 AND a.tank = 1
            ) CARD_NUMBER,
            (
                            SELECT b.col2
                            FROM(
                                    SELECT CARD,tank
                                    FROM    (   SELECT CARD,
                                                RANK () OVER(ORDER BY CARD DESC) tank
                                                FROM
                                                        (
                                                            SELECT floor(dbms_random.value(1,4)) CARD
                                                            FROM dual
                                                        ) abc
                                            ) b
                                ) A
                            INNER JOIN CardType b
                            ON A.CARD = b.col1 AND a.tank = 1
            ) CARD_TYPE
FROM dual;

这篇评论太长了

你的代码看起来比我想象的要复杂得多。我希望有一个名为
牌组
的CTE,牌组中有52张牌。然后你将从“牌组”中取出牌

这大概是

with CardNumber as ( . . . ),
     CardSuit as ( . . . ),
     Deck as (
      select cs.col2 as suite, cn.col2 as number
      from CardNumber cn cross join
           CardSuit cs
    )
select *
from deck
order by dbms_random.value()
fetch first 1 row only;

这篇评论太长了

你的代码看起来比我想象的要复杂得多。我希望有一个名为
牌组
的CTE,牌组中有52张牌。然后你将从“牌组”中取出牌

这大概是

with CardNumber as ( . . . ),
     CardSuit as ( . . . ),
     Deck as (
      select cs.col2 as suite, cn.col2 as number
      from CardNumber cn cross join
           CardSuit cs
    )
select *
from deck
order by dbms_random.value()
fetch first 1 row only;

是否有任何特定的原因需要在SQL中执行此操作?我假设这是某种类型的分配,但这确实是,而且我不能强调,99%的时间都应该在服务器上完成,因为维护和版本化SQL脚本对于生产就绪的代码来说是一场噩梦。我发现了“dbms_random.value()”并想找个借口来使用它,这是我能想到的唯一一个没有这样做的场景“从dual中选择dbms_random.value();“这需要在SQL中完成的具体原因是什么?我假设这是某种类型的赋值,但实际上,我不能强调这一点,99%的时间都应该在服务器上完成,因为维护和版本化SQL脚本对于生产就绪的代码来说是一场噩梦。了解“dbms_random.value()我想找个借口使用它,这是我能想到的唯一一个不是“从dual中选择dbms_random.value()”的场景;感谢你的回答,很可能会“接受这个答案”(取决于下一篇文章),再次感谢你给我下一个研究领域“交叉连接”。感谢你的回答,很可能会“接受这个答案”(取决于接下来发布的内容),再次感谢您为我的下一个学习领域提供“交叉连接”。