0

次の 2 つのテーブル tableA a (id、name、surname、program、date) tableB b (id、aid、name、surname、extracard) と tableA.id = tableB.aid (1 対 n の関係) があります。

Sample data for tableA:
| ID | NAME  | SURNAME | PROGRAM |   DATE    |  EXPIRES  |
----------------------------------------------------------
| 1  | TOM   | JONES   | 1,2,3   | 12/8/2012 | 12/8/2013 |
| 2  | JAMIE | OLIVER  | 4,5,6   | 15/8/2012 | 15/8/2013 |

Sample data for tableB:
| ID | AID | NAME  | SURNAME | CARD |
-------------------------------------
| 1  |  1  | ANNE  | JONES   |  1   |
| 2  |  1  | JACK  | BOWER   |  0   |
| 3  |  2  | KATE  | PERRY   |  1   |
| 4  |  2  | JOHN  | DOE     |  0   |
| 5  |  2  | HARRY | POTTER  |  0   |

結果では、tableB の各メンバーは、tableA のすべての値 (プログラム、日付、有効期限など) を持ち、tableB の名前と姓のみを同じ列に表示する必要があります(合体??)。また、a.id between (%id1 and %id2) の between 句と、tableB.card=1 の行を選択するための WHERE ステートメントを使用する必要があります。

| a.ID | NAME  | SURNAME | PROGRAM |   DATE    |  EXPIRES  |
------------------------------------------------------------
|  1   | TOM   | JONES   | 1,2,3   | 12/8/2012 | 12/8/2013 |
|  1   | ANNE  | JONES   | 1,2,3   | 12/8/2012 | 12/8/2013 |
|  2   | JAMIE | OLIVER  | 4,5,6   | 15/8/2012 | 15/8/2013 |
|  2   | KATE  | PERRY   | 4,5,6   | 15/8/2012 | 15/8/2013 |
4

3 に答える 3

1
 SELECT * FROM 
   ( (SELECT a.id ,a.name,a.surname,a.program,a.date,a.expires 
    from tableA a left outer join tableB b 
    on b.aid=a.id 
    where b.card=1 and (a.id between '1' and '2'))
    UNION ALL
    (SELECT a.id ,b.name,b.surname,a.program,a.date,a.expires 
    from tableA a left outer join tableB b 
    on b.aid=a.id 
    where b.card=1 and (a.id between '1' and '2'))) t
    ORDER BY id

編集済み: http://sqlfiddle.com/#!2/d8227/1を参照してください

于 2012-07-10T08:06:48.563 に答える
0
(select a.ID,a.NAME,a.SURNAME,a.PROGRAM,a.DATE,a.EXPIRES from tableA a where ...)    
Union All    
(select a2.ID,b.NAME,b.SURNAME,a2.PROGRAM,a2.DATE,a2.EXPIRES from tableB b 
 left join tableA a2 on b.aid = a2.id where ...);

..や.などの句を使用しleft/inner joinて、必要に応じて選択することもできます。wherebetweenwhere id between 2 and 8where id > 2 and id < 8

于 2012-07-10T08:18:42.843 に答える
0

何方をお探しですか -

(SELECT a.id, name, surname, program, date, expires FROM tableA a WHERE a.id BETWEEN '%id1' and '%id2')
UNION
(SELECT a.id, b.name, b.surname, program, date, expires FROM tableB b LEFT JOIN tableA a ON b.aid=a.id WHERE b.card=1 AND (a.id between '%id1' and '%id2') )
ORDER BY a.id ASC
于 2012-07-10T08:15:37.373 に答える