Я пытаюсь решить эту проблему для этой проблемы здесь. Мне нужно было написать команду SQL, которая проверяет наличие более одной строки в таблице SEQUENCE с одним и тем же TCKID. Если есть, то мне нужно было обновить и установить тип от 1 до 2 строки в таблице TICKETS с соответствующим TCKID.
Таблица билетов
![enter image description here](https://i.stack.imgur.com/EndHk.png)
Таблица последовательности
![enter image description here](https://i.stack.imgur.com/cOM6R.png)
Это то, что я пытался сделать. Я пытаюсь подсчитать количество строк с одинаковым TCKID и сгруппировать их, а затем подсчитать их по группам. Я все еще пытаюсь использовать этот счетчик чисел, чтобы решить, какой TCKID появится в нескольких строках таблицы SEQUENCE, просто для обновления данных в таблице TICKETS. Я не уверен, нужно ли мне условие if-else
или условие for
l oop, или использовать 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](https://i.stack.imgur.com/pB8sX.png)
Я не знаю, считается ли это жестким кодированием, но оно полностью работает для 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](https://i.stack.imgur.com/RALeA.png)
Вопросы такие: Как с помощью кода я выполнил то же самое без жесткого кодирования? Каков наилучший подход к этому?