1

私のテーブルは「DESIGNATION」です

ID    ||    DEPT_ID     ||      E_NAME       ||      DESIGNATION
1     ||     12         ||        A          ||       EMPLOYEE
2     ||     12         ||        B          ||       MANAGER
3     ||     12         ||        C          ||       EMPLOYEE
4     ||     14         ||        D          ||       MANGER
5     ||     14         ||        E          ||       EMPLOYEE
6     ||     14         ||        F          ||       EMPLOYEE

DEPT_NAME からマネージャーの名前が欲しい....

平均結果は次のようになります

ID    ||    DEPT_ID     ||      E_NAME       ||      DESIGNATION  ||   MANAGER
1     ||     12         ||        A          ||       EMPLOYEE    ||    B
2     ||     12         ||        B          ||       MANAGER     ||    B
3     ||     12         ||        C          ||       EMPLOYEE    ||    B
4     ||     14         ||        D          ||       MANGER      ||    D
5     ||     14         ||        E          ||       EMPLOYEE    ||    D
6     ||     14         ||        F          ||       EMPLOYEE    ||    D

私のクエリは

SELECT `ID`,`DEPT_ID`,`ENAME`,`DESIGNATION`,
    (select `ENAME` from `DESIGNATION` where 
        (select `E_NAME` from `DESIGNATION` where 
            (SELECT `DEPT_ID` FROM `DESIGNATION` WHERE `DESIGNATION` = 'EMPLOYEE')
            =
            (SELECT `DEPT_ID` FROM `DESIGNATION` WHERE `DESIGNATION` = 'MANAGER') and `DESIGNATION`='MANAGER')
    AS MANAGER
from `DESIGNATION`

しかし、それは機能していません...

4

6 に答える 6

3

JOIN操作が必要です。これは、データベースを操作するときの基本的な概念です。あなたはそれについて読むのに少し時間がかかるはずです.

そんな感じ?

SELECT A.*, B.E_NAME 
   FROM DESIGNATION AS A, DESIGNATION AS B
   WHERE B.DESIGNATION = "MANAGER" 
     AND A.DEPT_ID = B.DEPT_ID

または明示的な JOIN構文を使用します。

SELECT A.*, B.E_NAME 
   FROM DESIGNATION AS A JOIN DESIGNATION AS B USING (DEPT_ID)
   WHERE B.DESIGNATION = "MANAGER" 

編集: 複数のマネージャーを持つことができる場合は、GROUP_CONCAT明示的な group by で集計関数を使用できますE_NAME(これが一意のキーであると仮定します):

SELECT A.*, GROUP_CONCAT(B.E_NAME) 
   FROM DESIGNATION AS A, DESIGNATION AS B
   WHERE B.DESIGNATION = "MANAGER" 
     AND A.DEPT_ID = B.DEPT_ID
   GROUP BY(A.E_NAME)
于 2013-06-27T09:58:38.577 に答える
1

古い学校の結合構文 - 申し訳ありませんが、サブクエリはあまり意味がありません。

Select d.ID,
       d.DEPT_ID,
       d.E_NAME, 
       d.DESIGNATION
       m.MANAGER
from   designation d, 
       designation m
where  d.dept_id   =   m.dept_id
and    m.designation = 'MANAGER'
于 2013-06-27T09:58:39.927 に答える
0

以下を試してください

SELECT t.id
       ,t.dept_id
       ,t.e_name
       ,t.designation
       ,ta.e_name As Manager   FROM Table1 t   JOIN (SELECT e_name,dept_id 
          FROM Table1 WHERE designation  = 'MANAGER' 
          GROUP BY dept_id,e_name) ta    ON ta.dept_id = t.dept_id

SQLFiddle デモ

于 2013-06-27T10:13:17.407 に答える
0

これは、実行しているサーバー側のスクリプトに適しているように見えます。たとえば、PHP では次のようにできます。

$managers = []; // array() before version 5.4
$employees = []; // see above comment
$query = "SELECT * FROM `DESIGNATION`";
$result = mysql_query($query); // adjust according to extension of choice
while($row = mysql_fetch_assoc($result)) { // same as previous comment
    $employees[] = $row;
    if( $row['DESIGNATION'] == "MANAGER") $managers[$row['DEPT_ID']] = $row['E_NAME'];
}
foreach($employees as $i=>$e) {
    $employees[$i]['MANAGER'] = $managers[$e['DEPT_ID']] ?: "Nobody";
}
于 2013-06-27T10:00:13.857 に答える