从多个数据库中创建具有相同列名的多个表的视图?

时间:2019-10-31 08:08:50

标签: mysql join view

我目前有两个名为t1和t2的表,其结构如下:

id varchar(7)NOT NULL缺省'0',   code varchar(30)默认为空

每个表内部大约有50个数据,我的目标是创建一个视图表,将视图中的两个数据组合在一起。

到目前为止,这些是我尝试过的查询,这些查询已经达到了我的目标:

Create view test_view as
SELECT
  t1.id,
  t1.code,
  t2.id,
  t2.code,

FROM test1 t1
CROSS JOIN test2 t2

哪个返回结果,但是由于某种原因,第二个表中的值重复了50次。

我尝试过的另一个查询(我打算将它们全部放在同一列中,而不是使新列区分t1和t2)执行相同的操作

SELECT a.id, b.id
FROM test1.t1 as a 
LEFT JOIN test2.t2 as b ON a.id <> b.id;

INNER JOIN,OUTER JOIN,CROSS JOIN显示重复数据的相同结果。

我尝试使用 UNION ,但是当使用UNION时,视图表不允许我编辑列。

我试图在数小时之内在互联网上四处寻找,但似乎无法弄清楚这样做的逻辑。我将不胜感激。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

JOIN的目的是生成一个虚拟表,其中包含满足ON条件的联接表中的行对的所有组合。您没有ON条件,因此可以获得所有可能的行对:无用的数据爆炸。

如果要将两个表连接起来以使其显示为一个,则应使用UNION或UNION ALL(如果要保留重复项)。

但是尝试将行插入到定义为两个表的UNION的视图中是没有意义的:INSERTed行必须进入物理表之一。尝试将其插入视图时,您无法向表服务器提供有关要使用哪个物理表的线索。

即使您插入或更新test1.t1或test2.t2,也可以使用视图来检索数据。