简体   繁体   中英

How do I join a temporary table with another table?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM