【问题标题】:How do I join a temporary table with another table?如何将临时表与另一个表连接起来?
【发布时间】:2020-05-03 08:42:05
【问题描述】:

我正在尝试解决这个问题。我需要编写一个 SQL 命令来检查 SEQUENCE 表中是否有多个具有相同 TCKID 的行。如果有,那么我需要更新并设置 TICKETS 表中具有相应 TCKID 的行的类型从 1 到 2。

票务表

序列表

这就是我试图做的。我正在尝试计算具有相同 TCKID 的行数并将它们分组,然后对它们进行分组。我仍然很难使用该数字计数来决定哪个 TCKID 出现在 SEQUENCE 表中的多行上,只是为了更新 TICKETS 表中的数据。我不确定我是否需要 if-else 条件或 for 循环条件,或者使用 INNER JOIN 或 OUTER JOIN 将临时表与 SEQUENCE 表连接起来。我现在不知道自己在做什么。

UPDATE
    (SELECT TCKID, COUNT(*) AS TotalFlights
    FROM SEQUENCE
    GROUP BY TCKID)
JOIN SEQUENCE ON SEQUENCE.TCKID = TICKETS.TCKID
SET Type = '2'
WHERE TotalFlights > 1;

这是我收到的错误消息。 错误代码:1248。每个派生表都必须有自己的别名

与此同时,

SELECT TCKID, COUNT(*) AS TotalFlights
    FROM SEQUENCE
    GROUP BY TCKID

将返回临时表。

我不知道这是否被认为是硬编码,但它完全适用于 TCKID = 1 到 16。

UPDATE TICKET SET Type = '2' WHERE TCKID = 1 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 1);

UPDATE TICKET SET Type = '2' WHERE TCKID = 2 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 2);

UPDATE TICKET SET Type = '2' WHERE TCKID = 3 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 3);

UPDATE TICKET SET Type = '2' WHERE TCKID = 4 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 4);

UPDATE TICKET SET Type = '2' WHERE TCKID = 5 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 5);

UPDATE TICKET SET Type = '2' WHERE TCKID = 6 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 6);

UPDATE TICKET SET Type = '2' WHERE TCKID = 7 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 7);

UPDATE TICKET SET Type = '2' WHERE TCKID = 8 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 8);

UPDATE TICKET SET Type = '2' WHERE TCKID = 9 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 9);

UPDATE TICKET SET Type = '2' WHERE TCKID = 10 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 10);

UPDATE TICKET SET Type = '2' WHERE TCKID = 11 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 11);

UPDATE TICKET SET Type = '2' WHERE TCKID = 12 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 12);

UPDATE TICKET SET Type = '2' WHERE TCKID = 13 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 13);

UPDATE TICKET SET Type = '2' WHERE TCKID = 14 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 14);

UPDATE TICKET SET Type = '2' WHERE TCKID = 15 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 15);

UPDATE TICKET SET Type = '2' WHERE TCKID = 16 AND
    (SELECT COUNT(*) > 1
    FROM SEQUENCE
    WHERE TCKID = 16);

SELECT * FROM TICKET;

问题是:我如何在没有硬编码的情况下用代码完成同样的事情?最好的方法是什么?

【问题讨论】:

    标签: mysql sql database join system


    【解决方案1】:

    您可以尝试在子查询上使用带有连接的更新
    例如:

        UPDATE Tickets T
        INNER JOIN  ( SELECT TCKID, COUNT(*) 
            FROM SEQUENCE
            GROUP BY TCKID 
            HAVING count(*) > 1
            ) S ON T.TCKID = S.TCKID
        SET Type = '2'
    

    【讨论】:

      猜你喜欢
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多