2

私は2つのテーブルempmasterallocation. union2 つのテーブルから結果を取得するために、SQL 操作を行っていました。他にもありempmasterます。テーブルには、 と呼ばれる別のフィールドからの外部キーが含まれています。次を満たすものを取得する必要があります。empidempdetailsallocationempidempmasterper_allocempdetails

  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

わかりました、あなたの問題について私が理解したことから、2 つの問題が見えます。

  1. 2 番目の select ステートメントのサブクエリに不要なグループ化があります。と書くだけでOKです
    select tbl_allocation.emp_id from tbl_allocation where tbl_allocation.per_alloc<100)*
  2. そして、あなたの質問への答え.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 に答える
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 に答える