我在另一个问题中描述了同样的问题:
但是我的表没有共同的字段,我只想将它们加入“第一个与第一个”,“第二个与第二个”等等。
例子:
表格1
- 约翰
- 玛丽
- 查尔斯
表_2
- 史密斯
- 好人
- 衬套
表格结果
- 约翰 | 史密斯
- 玛丽 | 好人
- 查尔斯 | 衬套
表应该总是有相同数量的项目,但如果没有,不存在的项目可以用 null 填充,如“henrry | null”。
也许可以先添加一个字段来为每一行编号,或者其他什么,但性能在这里很关键。
我在另一个问题中描述了同样的问题:
但是我的表没有共同的字段,我只想将它们加入“第一个与第一个”,“第二个与第二个”等等。
例子:
表应该总是有相同数量的项目,但如果没有,不存在的项目可以用 null 填充,如“henrry | null”。
也许可以先添加一个字段来为每一行编号,或者其他什么,但性能在这里很关键。
这确实不是一个好主意,并且永远不能保证一致的结果,但是您可以获取每个表的行号并将其用作您的连接字段。
尝试这样的事情:
SELECT Field1, Field2
FROM (SELECT Field1, @curRow := @curRow + 1 AS row_number
FROM Table1
JOIN (SELECT @curRow := 0) r) t1
JOIN (SELECT Field2, @curRow2 := @curRow2 + 1 AS row_number
FROM Table2
JOIN (SELECT @curRow2 := 0) r) t2 on t1.row_number = t2.row_number
这是SQL Fiddle。
这仅在两个表具有相同行数时才有效。如果没有,您将丢失数据...
祝你好运。
如果您想要性能,只需使用整数主键,但您确实需要键。您不能也不应该按照您描述的方式进行操作。:)
编辑:
鉴于您的要求是专门为实现随机结果,我认为您可以使用cross join
.
下面的小提琴捕捉了我为证明这一点所做的努力。
--
否则,如果您的数据确实是恒定的(在这种情况下,为什么要使用数据库?)那么它可以产生一致的结果 - 但您可以轻松定义键并完成它。如果不是,请考虑当您扩展数据库时,您期望“不存在的 [原文如此] 项目可能填充为 null”会发生什么情况:
表格1
foo
bar
表 2
qux
结果
foo qux
bar null
表格1
foo
bar
baz
表 2
qux
quxx
结果
foo qux
bar quxx
baz null
您无法添加baz quxx
到数据库中。