1

以下のような質問をしたいと思います。

3 つのテーブルがあります。フィールド type-id の値 tbl1 をテーブル内の id と一致させたいです

タイプ。各グループIDのすべてのタイプ名をリストする結果として結果を取得したいと思います。

TB1 
Gid TypeID  Value
1   1   5
1   2   10
2   3   6

TBLTYPE
ID  NAME
1   A
2   B
3   C
4   D
5   E


RESULT that i need  

Type  value
A    5
B   10
C   
D   
E   
A   
B   
C   6
D   
E   
4

4 に答える 4

3

このクエリを試してください

select  
    tmp.name, 
    tmp.gid, 
    a.value 
from 
    (select 
        a.*, 
        b.* 
    from 
        (select 
            distinct gid 
        from 
            tbl1 a
        )a, 
        tbl2 b
    ) tmp 
left join 
    tbl1 a 
on 
    a.typeid=tmp.id and 
    a.gid = tmp.gid 
order by      --OPTIONAL PART
    tmp.gid

編集

派生テーブルは、このクエリのメイン テーブルであり、各グループに関連付けられた各ユーザーを提供tmpする一意の tbl2 日付とのクロス結合によって派生されます。table は、必要なテーブルを提供するスコア テーブルである tbl1 と結合されたままです。各派生テーブルをフィドルで個別に実行して、適切に機能していることを理解できます。gidtmp

Fiddle (適切な理解のために、各クエリは個別に言及されています)

フィドル

| NAME | GID |  VALUE |
-----------------------
|    A |   1 |      5 |
|    B |   1 |     10 |
|    C |   1 | (null) |
|    D |   1 | (null) |
|    E |   1 | (null) |
|    A |   2 | (null) |
|    B |   2 | (null) |
|    C |   2 |      6 |
|    D |   2 | (null) |
|    E |   2 | (null) |
于 2013-05-31T09:24:49.837 に答える
0

これを試すことができます(基本的に、グループごとにクエリが必要です):

SELECT
    t1.NAME as 'Type',
    IFNULL(t2.Value,'') as 'value'
FROM
    TBLTYPE t1
LEFT JOIN t2
    ON t2.TypeID = t1.ID
    AND t2.Gid = 1
UNION ALL
SELECT
    t1.NAME as 'Type',
    IFNULL(t2.Value,'') as 'value'
FROM
    TBLTYPE t1
LEFT JOIN t2
    ON t2.TypeID = t1.ID
    AND t2.Gid = 2
于 2013-05-31T09:24:06.083 に答える
0
SELECT TBLRESULT.NAME as Type, TB1.Value as value FROM TBLRESULT, TB1 LEFT OUTER JOIN TBLTYPE ON TB1.value = TBLTYPE.ID;
于 2013-05-31T09:16:37.277 に答える
0
SELECT
TBLTYPE.Name As TYpe
TB1.Value,  
Value,
FROM TB1 
JOIN TBLTYPE on TBLTYPE.Id=TB1.ID
GROUP BY TBLTYPE.Type
于 2013-05-31T09:11:37.590 に答える