我正在尝试为此问题解决此问题。我需要编写一条SQL命令,以检查SEQUENCE表中是否有多个具有相同TCKID的行。如果存在,那么我需要更新TICKETS表中行的1到2并将其Type设置为相应的TCKID。
门票表
序列表
这是我试图做的。我正在尝试计算具有相同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;
问题是:我如何在不进行硬编码的情况下完成同一件事?最好的方法是什么?
您可以尝试对子查询使用带有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'