我有2个表关系。
这是雇员表:
"id" "nik" "namalengkap" "tgl_join" "resign_date"
"1" "1802012637" "Agung" "2013-02-18" NULL
"2" "1801012633" "Karyawan" "2017-07-12" "2018-08-06"
"3" "1804232684" "Test Data" "2018-08-21" NULL
这是employee_historypositions表:
"id" "nik" "tgl_awal" "tgl_akhir" "level_id" "jabatan_id" "departemen_id" "divisi_id" "direktorat_id" "publish"
"1" "1802012637" "2017-05-12" "2017-09-12" "1" "[""3"",""4""]" "1" "2" "1" "1"
"2" "1802012637" "2018-06-12" "2018-07-12" "2" "[4,2]" "1" "9" "3" "1"
"3" "1801012633" "2018-07-26" \N "2" "[3,2]" "1" "11" "3" "1"
"4" "1801012633" "2018-09-10" "2018-07-21" "6" "[4]" "1" "3" "1" "0"
"5" "1804232684" "2018-07-21" "2018-08-21" "10" "[4]" "1" "2" "1" "1"
我想显示d,nik,nama lengkap,jabatan,级别,部门,divisi的数据有效于2018年7月
使用这种情况: 员工表中的条件:
employee_historypositions表中的条件:
如何获取查询?
有人可以帮助我吗?谢谢
我尝试过此查询
SELECT a.*, b.nik, b.namalengkap,b.tgl_join, b.resign_date
FROM employee_historypositions a
LEFT OUTER
JOIN
employees b ON a.nik = b.nik
WHERE EXTRACT(YEAR_MONTH
FROM b.tgl_join) <= CONCAT("2018","07") AND b.resign_date IS NULL OR EXTRACT(YEAR_MONTH
FROM b.resign_date) > CONCAT("2018","07")
您可以从这里检查 http://sqlfiddle.com/#!9/700c31/1
,但数据全部显示在employee_historypositions中。 我只是不显示具有这种条件的数据。
答案 0 :(得分:0)
这是获取两个表的所有列的快速方法。请注意,因为它包含更多唯一数据,所以请首先使用employee_historypositions。
select
t1.*,
t2.*
from
employee_historypositions t1
join
employees table t2
on
t1.nik = t2.nik;
然后,您可以替换*
以获得所需的确切列。
因此,如果您想要第一个表中的一列,而第二个表中的一列,则可以:
select
t1.tgl_join,
t2.tgl_awal
from
employee_historypositions t1
join
employees table t2
on
t1.nik = t2.nik;
答案 1 :(得分:0)
join_date小于2018年的第7个月
`tgl_join` < '2018-07-01'
resign_date等于NULL或resign_date超过7个月2018年
`resign_date` IS NULL OR `resign_date` > '2018-07-01'
发布等于1
`publish` = 1
* tgl_awal少于7个月2018 *
`tgl_awal` < '2018-07-01'
如果在显示的数据之间有2个重复的数据,则必须显示最新的重复数据。
SELECT DISTINCT ...
因此,您的查询可能类似于:
--replace the ... by the fields you need.
SELECT DISTINCT emp.id, emp.nik, hist.jabatan_id ...
FROM `employees` emp
JOIN `employee_historypositions` hist
ON `emp`.`nik` = `hist`.`nik`
WHERE (`emp`.`tgl_join` < '2018-07-01'
AND (`emp`.`resign_date` IS NULL OR `emp`.`resign_date` > '2018-07-01')
AND `hist`.`publish` = 1
AND `hist`.`tgl_awal` < '2018-07-01')