2

1 つのテーブルからすべての値を返し、値を複製せずにこのテーブルを別のクエリに結合する必要があります。これはこれまでの私のクエリです。

    CREATE TABLE tmp_tbl (Id INT(11) PRIMARY KEY, Per VARCHAR(30), Des VARCHAR(50), Rol INT(11));
INSERT INTO tmp_tbl(Id, Per, Des, Rol)
SELECT DISTINCT
     p.p_id AS Id,
    p.p_title AS Per,
    p.p_description AS Des,
    '' AS Rol
    FROM perm p;

 SELECT  
    p.p_id AS Id,
    p.p_title AS Per,
    p.p_description AS Des,
    r.id AS Rol
    FROM perm p
    LEFT JOIN roles rp
        ON p.p_id = rp.p_id
    INNER JOIN rol r
        ON r.id = rp.r_id AND rp.r_id IN (101)
    UNION  ALL
SELECT * FROM
tmp_tbl;
 DROP TABLE tmp_tbl;

このステートメントは、最初の選択からすべての行を返しますが、2 番目の選択ステートメントからの共用体の行を複製します。

4

3 に答える 3

1

を交換してみてください

UNION  ALL

UNION

union all重複を削除しません。

于 2012-07-05T07:28:57.850 に答える
0

必ず使用UNION DISTINCTしてください:

(SELECT p.p_id AS Id, p.p_title AS Per, p.p_description AS Des, r.id AS Rol
FROM perm p
LEFT JOIN roles rp ON p.p_id = rp.p_id
INNER JOIN rol r ON r.id = rp.r_id AND rp.r_id IN (101))
UNION  DISTINCT
(SELECT * FROM tmp_tbl);
于 2012-07-05T07:29:53.467 に答える
0

UNIONではなく、を使用する必要がありますUNION ALL
実際UNION、重複レコード (結果のすべての列が同じ) は削除されますが、削除されUNION ALLません。

于 2012-07-05T07:29:07.163 に答える