Egy website kéri le. Végrehajtási terv alatt mit értesz, az explaint?
Mir értesz "kézzel leprogramozás" alatt? Olyannal próbálkoztam, hogy leszűröm a `salaries`
és `titles`
táblát és csak azokat az ID-kat kérem le, amik kellenek, de rossz eredményeket adott, az OP-ban ott a query.
Arra én is gondoltam, hogy csinálok egy közös táblát, amiből kérdezget, aztán ott is update-elgeti, amit kell, csak nem tudom, hogy azt el fogják-e fogadni, bár ez csak az egyik gond. A nagyobbik, hogy próbálkoztam olyannal, hogy
DROP TABLE IF EXISTS `e`;
CREATE TABLE `e` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` enum('M','F') NOT NULL,
`hire_date` date NOT NULL,
`title` varchar(50) NOT NULL,
`salary` int(11) NOT NULL,
`dept_name` varchar(40) NOT NULL,
`dept_no` char(4) NOT NULL,
PRIMARY KEY (`emp_no`),
INDEX `birth_date` (`birth_date`),
FULLTEXT `first_name` (`first_name`),
FULLTEXT `last_name` (`last_name`),
INDEX `gender` (`gender`),
INDEX `hire_date` (`hire_date`),
FULLTEXT `title` (`title`),
INDEX `salary` (`salary`),
FULLTEXT `dept_name` (`dept_name`),
FULLTEXT `dept_no` (`dept_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `e`
SELECT `employees`.*, `titles`.`title`, `salaries`.`salary`, `departments`.`dept_name`, `departments`.`dept_no`
FROM `employees`
LEFT JOIN `titles` ON
`titles`.`emp_no` = `employees`.`emp_no` AND
`titles`.`from_date` = (SELECT MAX(`from_date`) FROM `titles` WHERE `titles`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `salaries` ON
`salaries`.`emp_no` = `employees`.`emp_no` AND
`salaries`.`from_date` = (SELECT MAX(`from_date`) FROM `salaries` WHERE `salaries`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `dept_emp` ON
`dept_emp`.`emp_no` = `employees`.`emp_no` AND
`dept_emp`.`from_date` = (SELECT MAX(`from_date`) FROM `dept_emp` WHERE `dept_emp`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `departments` ON `dept_emp`.`dept_no` = `departments`.`dept_no`;
Csak ez 11076 sor felett "Error in query (1062): Duplicate entry '21076' for key 'PRIMARY'"
hibaüzenetet dobott. Fel nem fogom miért, hiszen a beszúrandó `emp_no`
nem ismétlődik sehol, más PRIMARY KEY meg nincs ebben a táblában...
Egyébként a teszt DB itt elérhető: https://github.com/datacharmer/test_db
Materializált nézet MySQL-ben nincs.
Ja, és a lényeg:
gender enum('M','F')Már itt rossz a sémád! Mi ez a kirekesztés????4!!?!? :-)
Majd írok a MySQL-eseknek, hogy tegyenek be kettő db. 256-bites floatot helyette és akkor két csúszkán lehet beállítani, hogy ki mennyire M, meg F. :P Bár inkább nem adnék nekik ötleteket...