I'm trying to resolve this issue for this problem here. I needed to write an SQL command that checks if there are more than one row in the SEQUENCE table with the same TCKID. If there is, then I needed to update and set Type from 1 to 2 of the row in the TICKETS table with the corresponding TCKID.
Tickets Table
Sequence Table
This is what I tried to do. I'm attempting to count the number of rows that has the same TCKID and group them then count them groups. I still struggle to use that number count to decide which TCKID appears on more than one row in the SEQUENCE table just to update the data in the TICKETS table. I'm not sure if I needed an if-else
condition or a for
loop condition or a use an INNER JOIN or OUTER JOIN to join the temporary table with the SEQUENCE table or as such. I'm at the point I don't know what I'm doing.
UPDATE
(SELECT TCKID, COUNT(*) AS TotalFlights
FROM SEQUENCE
GROUP BY TCKID)
JOIN SEQUENCE ON SEQUENCE.TCKID = TICKETS.TCKID
SET Type = '2'
WHERE TotalFlights > 1;
This is the error message I got. Error Code: 1248. Every derived table must have its own alias
Meanwhile,
SELECT TCKID, COUNT(*) AS TotalFlights
FROM SEQUENCE
GROUP BY TCKID
would return the temporary table.
I don't know if this is considered hardcoding, but it totally works up for TCKID = 1 to 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;
The questions is: How code I accomplished the same thing without hardcoding? What is the best approach to this?
You could try using a update with join on subquery
eg:
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'
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.