【发布时间】: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