0

それが可能かどうかはわかりませんが、ここでばかげた質問をしている可能性があります。もしそうなら、許してください。
多少似ているが完全ではない 2 つのテーブルがあります。
表 1 (user_opinions)

    | o_id     | user_id | opinion      |is_shared_from| date,isglobal etc
    |:---------|---------|:------------:|:------------:|
    | 1        |       11|     text 1   | 0
    | 2        |       13|     text 2   | 2
    | 3        |        9|     text 3   | 0

表 2 (Buss_opinions)

    | bo_id    | o_id   | user_id      | opinion    | date
    |:---------|--------|:------------:|:------------:|
    | 1        |       2|   52         | bus text 1
    | 2        |       3| 41           | bus text 2

標準の選択を行い、次のように結合すると:

SELECT * FROM user_opinions uo
JOIN Buss_opinions bo
ON uo.o_id = bo.o_id

これにより、両方のテーブルのデータが結合された行が返されます。

私の質問は、これら 2 つのテーブルから別々の行でデータを取得したい場合はどうすればよいかということです。結果は次のようになります。

| oid      | bo_id   | opinion      | nb: and other rows from both tables
|:---------|---------|:------------:|
| 1        |    NULL |     text 1   | nb:from table 1
| NULL     |        1|    bus text 1| nb:from table 2
| 2        |    NULL |     text 2   |nb:from table 1

等々

テーブルのデータの両方を取得し、共通フィールドがない場合はフィールドに NULL 値を入れます。このための結合の種類はありますか? またはこれを行う他の方法はありますか?

4

1 に答える 1

4

UNION を使用する方法の 1 つ ( http://dev.mysql.com/doc/refman/5.0/en/union.html ):

SELECT oid AS OID, null AS BOID, user_id AS USERID, opinion AS Opinion
FROM table1
UNION
SELECT null AS OID, bo_id AS BOID, user_id AS USERID, opinion AS Opinion
FROM table2

編集:これをさらに一歩進めて、CONCAT関数と組み合わせることもできます:

SELECT CONCAT('OID-', oid) AS ID, user_id AS USERID, opinion AS Opinion
FROM table1
UNION
SELECT CONCAT('BOID-', bo_id) AS ID, user_id AS USERID, opinion AS Opinion
FROM table2
于 2013-02-05T23:07:46.573 に答える