【问题标题】:Selecting entire rows from two tables从两个表中选择整行
【发布时间】:2013-02-06 07:20:44
【问题描述】:

我不知道这是否可能,我可能会在这里问一个愚蠢的问题,如果是,请原谅我。
我有两张有些相似但不完全相似的表。
表一(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

这将返回两个表的数据连接在一起的行。

我的问题是,如果我想从这两个表中的单独行中获取数据怎么办。 结果应该是这样的:

| 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 值。有没有一种加入方式?还是有其他方法可以做到这一点?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    一种方法是使用 UNION (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
    

    【讨论】:

    • 非常感谢@LNendza,我现在就试试看:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多