如何在SELECT上将两个表折叠为一个?

时间:2012-04-26 05:51:55

标签: mysql

很难将这个问题总结为一句话。我有两个表 - 其中一个表是由外部订阅源自动更新的。第二个表具有第二个表中某些行的额外信息,由唯一键标识。这是一个例子:

Table1
    id: int PRIMARY KEY
    channel: varchar(255) UNIQUE KEY
    name: varchar(255) NOT NULL
    verified: tinyint(1) NOT NULL

Table2
    id: int PRIMARY KEY
    channel: varchar(255) UNIQUE KEY
    extra_info: varchar(255)

表1是主表。这是实际被选中的表。我希望Table2中的字段(除id和channel之外)在选择时移动到Table1,就像表1中存在的Table2中的所有行在选择时合并一样。

例如,我希望这两个表中的信息最终成为JSON输出,如此

[{
    "id": 5,
    "channel": "bkids2",
    "name": "Bkid",
    "verified": true,
    "extra_info": "Some extra information added using Table2"
},
...
]

我想知道最快的方法是什么。我可以使用SQL语法快速吗?我知道某些类型的查询非常慢,所以也许更快地获取两个表中的所有数据并使用服务器端编程语言执行合并?

我认为前者是正确答案的一半,在这种情况下:我如何使用MySQL做到这一点?子查询?加入?联盟?

我必须承认,我并不完全了解这些技术是如何运作的,或者它们的运作速度有多快/多慢,所以感谢任何能指出我正确方向的人。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT Table1.*, IFNULL(Table2.extra_info, 'DefaultValue') as extra_info
FROM Table1 LEFT OUTER JOIN Table2
ON Table1.id = Table2.id

答案 1 :(得分:0)

您可以编写查询以获得所需的输出。

SELECT id, channel, name, verified, extra_info FROM table_1 NATURAL JOIN table_2

此查询连接表并显示两者之间的公共结果。 希望这是你问题的答案....