从多个mysql表中插入不相关的值

时间:2014-03-10 14:48:15

标签: mysql insert

我有一个从多个mysql表读取的应用程序,但我想将所有数据放入1个表中。事实是,这些表没有链接字段...应用程序只是顺序处理3个表中的行,希望在每个表中排列正确的行(即table1中的row1适用于表2中的row1和table3,等等)

我的表格如下:

表1: 名,姓,ID,DOB

表2: 地址,城市,国家

表3: 密码

我想要的是: 表4: 姓名,ID,出生日期,地址,镇,国家,密码

我创建了Table4,现在我尝试使用select查询插入值... 我试过......

SELECT
t1.Name,
t1.Surname,
t1.ID,
t1.DoB,
t2.Address,
t2.Town,
t2.State,
t3.password
FROM table1 AS t1,table2 AS t2, table3 AS t3;

...但是这给了我重复的行,因为没有where子句。由于没有链接字段,我不能使用JOIN语句,对吧? 我对SQL不是很有经验,所以请帮忙!

1 个答案:

答案 0 :(得分:0)

嗯,官方说你搞砸了。除非使用ORDER BY子句,否则RDBMS中没有第一行或最后一行。这也是手册所说的。如果您发出

SELECT * FROM your_table;

您无法确保按照插入行的顺序获得结果,或者每次发出语句时都以相同的顺序获得结果。

另一方面,在实践中,大多数情况下,即使以相同的顺序插入行,您也会得到相同的结果。

你可以做的是,首先拍打那个没想到在确定排序顺序的每个表中放置一列的人(将来使用auto_increment列或保存日期的时间戳列和插入的时间或任何适合你需要的东西),其次,(但只有在没有其他选择时才这样做,就像我说的那样不可靠)你可以模拟一个你可以加入的行号。

SELECT * FROM (
    SELECT table1.*, @rn1 := @rn1 + 1 as row_number FROM 
    table1, 
    (SELECT @rn1 := 0) v
) a
LEFT JOIN (
    SELECT table2.*, @rn2 := @rn2 + 1 as row_number FROM 
    table2, 
    (SELECT @rn2 := 0) v
) b ON a.row_number = b.row_number
LEFT JOIN (
    SELECT table3.*, @rn3 := @rn3 + 1 as row_number FROM 
    table3, 
    (SELECT @rn3 := 0) v
) c ON a.row_number = c.row_number