我有两张表empmaster
和allocation
。我使用union
来执行sql操作,以便从两个表中获取结果。 empmaster
有empid
和其他empdetails
。表格allocation
包含来自empid
的{{1}}作为foriegn密钥,另一个字段名为empmaster
。我需要检索满足以下内容的per_alloc
:
empdetails
不在empmaster.empid
。
allocation.empid
中 empmaster.empid
。
我使用的MySQL查询是:
allocation.empid and allocation.per_alloc < 100
这只检索 select distinct(tbl_empmaster.emp_fname)
from tbl_empmaster
where tbl_empmaster.emp_id not in(select tbl_allocation.emp_id
from tbl_allocation)
union
select distinct(tbl_empmaster.emp_fname)
from tbl_empmaster
where tbl_empmaster.emp_id in(select tbl_allocation.emp_id
from tbl_allocation
group by emp_id
having sum(per_alloc) < 100)
,比如empdetails
,我需要检索tbl_empmaster.emp_fname
!当我尝试它时会出现很多错误,请问有没有人告诉我正确的方法呢?
答案 0 :(得分:1)
试试这个:
SELECT DISTINCT em.emp_fname, 0 alloc
FROM tbl_empmaster em
WHERE em.emp_id NOT IN(SELECT emp_id FROM tbl_allocation)
UNION
SELECT DISTINCT em.emp_fname, SUM(a.per_alloc) alloc
FROM tbl_empmaster em
INNER JOIN tbl_allocation a ON em.emp_id = a.emp_id
GROUP BY a.emp_id
HAVING SUM(a.per_alloc)<100
答案 1 :(得分:1)
好的,根据我对你的问题的理解,我发现了两个问题。
select tbl_allocation.emp_id from tbl_allocation where tbl_allocation.per_alloc<100)
* select A.emp_fname, B.per_alloc from tbl_empmaster A join tbl_allocation B using(emp_id) where A.emp_id in(select C.emp_id from tbl_allocation C where C.per_alloc<100))
**假设emp_id是主键*