1

私は次のようにユニオンクエリを持っています:

(SELECT t.id、t.name、c.company AS owner、t.creation_date AS date、t.notes
 FROMツールt、クライアントc
 WHERE t.id_customer = '15' AND t.trash_flag = '1')
  連合
(SELECT f.id、f.name、CONCAT(m.first_name、''、m.last_name)AS所有者、f.date、f.notes
 FROMファイルf、meta m
 WHERE((f.acl = 0)OR(f.acl = 1 AND '1' = TRUE)OR(f.acl = 2 AND f.id = '7'))AND f.id = '15' AND f .trash_flag = '1' AND m.user_id = f.id_user)
 ORDER BY'name''ASC' LIMIT 0,20
すべて正常に動作しますが、2つの質問があります。

  1. 結果セット全体に行番号を示す列を追加するにはどうすればよいですか
  2. UNIONを使用せずにこれを行うことはできますか?たとえば、高度な結合ですか?

MySQLの達人、お時間をいただきありがとうございます。

4

1 に答える 1

4

私は今それをテストすることはできませんが、私が見つけたものから、以下がうまくいくかもしれません:

参考:行番号変数

SQL ステートメント

SELECT  @rownum := @rownum + 1 rownum
        , t.*
FROM    (
            (SELECT t.id
                    , t.name
                    , c.company AS owner
                    , t.creation_date AS date
                    , t.notes 
            FROM    tool t
                    , client c 
            WHERE   t.id_customer = '15' 
                    AND t.trash_flag = '1' 
            ) UNION (
            SELECT  f.id
                    , f.name
                    , CONCAT(m.first_name, ' ', m.last_name) AS owner
                    , f.date
                    , f.notes 
            FROM    file f
                    , meta m 
            WHERE   ((f.acl = 0) OR (f.acl = 1 AND '1' = TRUE) OR (f.acl = 2 AND f.id = '7')) AND f.id = '15' AND f.trash_flag = '1' AND m.user_id = f.id_user) 
            )
        ) t
        , (SELECT @rownum := 0) r
ORDER BY 
        'name' ASC
LIMIT   0, 20 
于 2011-05-25T09:57:31.643 に答える