我遇到了另一个问题:
MySQL / PHP Joining tables without always having common column
但是我的桌子没有共同的领域,我只想加入他们“第一个与第一个”,“第二个与第二个”等等。
示例:
表格总是应该具有相同的项目数量,但如果没有,则不存在的项目可以填充为null,如“henrry | null”。
也许可以先添加一个字段来为每一行编号,或者其他什么,但这里的性能至关重要。
答案 0 :(得分:2)
这确实不是一个好主意,并且永远无法保证一致的结果,但您可以获取每个表的行号并将其用作您的加入字段。
尝试这样的事情:
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。
这仅在两个表具有相同行数时才有效。如果没有,你将丢失数据......
祝你好运。答案 1 :(得分:0)
如果你想要性能,只需使用整数主键,但你需要键。你不能也不应该按照你描述的方式去做。 :)
答案 2 :(得分:0)
修改强>
鉴于您的要求专门用于获得随机结果,我认为您可以使用cross join
。
以下fiddle抓住了我展示这一点的努力。
-
否则,如果您的数据是真正的常量(在这种情况下,您为什么使用数据库?)那么它可以产生一致的结果 - 但您可以轻松定义键并完成它。如果没有,请考虑一下,当您扩展数据库时,您的期望“未存在的[sic]项目可以填充为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
添加到数据库中。