1

テーブルの例を次に示します。

クライアント

╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc      ║ xex        ║
║ def      ║ tet        ║
╚══════════╩════════════╝ 

チーム

╔════════╦════════════╗
║ ACT_ID ║ GROUP_NAME ║
╠════════╬════════════╣
║     44 ║ xex        ║
║     32 ║ tet        ║
╚════════╩════════════╝

行動

╔════╦════════════╗
║ ID ║   STATE    ║
╠════╬════════════╣
║ 44 ║ complete   ║
║ 58 ║ incomplete ║
╚════╩════════════╝  

act_idin tableは tableにteamsも存在することに注意してくださいactionsid

group_idgroup_nameの2 つの列をgroup_name持つテーブルを選択したいと考えてact_idます state

私は次のようなことをしています:

SELECT group_id AND group_name 
FROM clients
WHERE group_name IN (SELECT group_name  
                     FROM teams, actions
                     WHERE teams.act_id = actions.id 
                       AND actions.state IS complete)

これは正しいです ?

みたいなことも考えました

SELECT group_id AND group_name 
FROM clients
WHERE group_name IN (SELECT group_name 
                     FROM teams
                     WHERE act_id IN (SELECT id 
                                      FROM actions
                                      WHERE teams.act_id = actions.id. 
                                        AND state IS complete))

上記のどちらかが正しいですか?

私が取得しようとしているテーブルは明らかにこれです:

╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc      ║ xex        ║
╚══════════╩════════════╝
4

1 に答える 1

3
SELECT  a.* 
FROM    clients a
        INNER JOIN teams b
            ON a.group_name = b.group_name
        INNER JOIN actions c
            ON b.act_ID = c.id
WHERE   c.state = 'complete'

SQLクエリに表示されるアスタリスク*は、使用可能なすべての列を選択することを意味します。この場合、すべてが table から選択されますclients。特定の列のみを選択したい場合は、commanot を区切りANDます。例えば、

SELECT  a.GROUP_ID, a.GROUP_NAME
FROM    clients a
        INNER JOIN teams b
            ON a.group_name = b.group_name
        INNER JOIN actions c
            ON b.act_ID = c.id
WHERE   c.state = 'complete'

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-06-01T18:59:04.550 に答える