( TCH | 2020. 10. 13., k – 09:02 )

Nálam ez van lekérésnek:

SELECT `employees`.*, `titles`.`title`, `salaries`.`salary`, `departments`.`dept_no`
FROM `employees`
LEFT JOIN `titles` ON (`titles`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `salaries` ON (`salaries`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `dept_emp` ON (`dept_emp`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `departments` AS `departments` ON `dept_emp`.`dept_no` = `departments`.`dept_no`
WHERE
	(`titles`.`from_date` = (SELECT MAX(`from_date`) FROM `titles` WHERE `titles`.`emp_no` = `employees`.`emp_no`)) AND
	(`titles`.`to_date` = '9999-01-01') AND
	(`salaries`.`from_date` = (SELECT MAX(`from_date`) FROM `salaries` WHERE `salaries`.`emp_no` = `employees`.`emp_no`)) AND
	(`salaries`.`to_date` = '9999-01-01') AND
	(`dept_emp`.`from_date` = (SELECT MAX(`from_date`) FROM `dept_emp` WHERE `dept_emp`.`emp_no` = `employees`.`emp_no`)) AND
	(`dept_emp`.`to_date` = '9999-01-01')

És ez 240124 sort ad vissza. A '9999-01-01'-re szűrések miatt amire a csatolt táblában nincs infó, az kiesik. Ha kiszedem őket

SELECT `employees`.*, `titles`.`title`, `salaries`.`salary`, `departments`.`dept_no`
FROM `employees`
LEFT JOIN `titles` ON (`titles`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `salaries` ON (`salaries`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `dept_emp` ON (`dept_emp`.`emp_no` = `employees`.`emp_no`)
LEFT JOIN `departments` AS `departments` ON `dept_emp`.`dept_no` = `departments`.`dept_no`
WHERE
	(`titles`.`from_date` = (SELECT MAX(`from_date`) FROM `titles` WHERE `titles`.`emp_no` = `employees`.`emp_no`)) AND
	(`salaries`.`from_date` = (SELECT MAX(`from_date`) FROM `salaries` WHERE `salaries`.`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`))

akkor 300053 sort ad. Valahol duplikációk vannak...
Az eredeti lekérés, amit írtam

SELECT `employees`.*, `titles`.`title`, `salaries`.`salary`, `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` AS `departments` ON `dept_emp`.`dept_no` = `departments`.`dept_no`

az is 300053 sort ad vissza. Márványra printelt windowsmanuallal ütném, aki kitalálta ezt az elcseszett DB szerkezetet, semmi épeszűség nincs benne; teljesen alap lenne, hogy még ha jegyezem is a korábbi csatolt állapotokat, a jelenlegit akkor is tárolom a főtáblában. Igazán nem lehet mondani, hogy azzal sok helyet pazarolnánk, amikor a fizetések táblája nagyobb, mint a főtábla. Mégis csak az lesz, hogy csinálni kell egy összevont táblát ebből, de ahhoz még ki kell derítenem, hogy mi a francra reklamál, hogy duplikáció van.