我如何将一个临时表与另一个表连接?

问题描述 投票:-1回答:1

我正在尝试为此问题解决此问题。我需要编写一条SQL命令,以检查SEQUENCE表中是否有多个具有相同TCKID的行。如果存在,那么我需要更新TICKETS表中行的1到2并将其Type设置为相应的TCKID。

门票表

enter image description here

序列表

enter image description here

这是我试图做的。我正在尝试计算具有相同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

将返回临时表。

enter image description here

我不知道这是否被认为是硬编码,但是对于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;

enter image description here

问题是:我如何在不进行硬编码的情况下完成同一件事?最好的方法是什么?

mysql sql database join system
1个回答
1
投票

您可以尝试对子查询使用带有join的更新例如:

    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'
© www.soinside.com 2019 - 2024. All rights reserved.