2

我有两张桌子empmasterallocation. 我曾经union为了从两个表中获取结果而进行 sql 操作。empmasterempidempdetails。表allocation包含作为empidempmaster键的另一个名为 的字段per_alloc。我需要检索empdetails满足:

  1. empmaster.empid不在allocation.empid

  2. empmaster.empidallocation.empid and allocation.per_alloc < 100.

我使用的 MySQL 查询是:

  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,我需要检索sum(per_alloc) from select tbl_allocation!当我尝试它时会出现很多错误,请任何人告诉我正确的方法吗?

4

2 回答 2

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
于 2012-12-12T12:50:52.137 回答
1

好的,根据我对您的问题的理解,我看到了两个问题。

  1. 第二个 select 语句的子查询中存在不必要的分组。写
    select tbl_allocation.emp_id from tbl_allocation where tbl_allocation.per_alloc<100)*应该没问题
  2. 以及您问题的答案。将第二个选择语句更改为以下内容,它应该可以工作:
    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是主键*

于 2012-12-12T12:53:15.317 回答