0

我在另一个问题中描述了同样的问题:

MySQL / PHP连接表而不总是有公共列

但是我的表没有共同的字段,我只想将它们加入“第一个与第一个”,“第二个与第二个”等等。

例子:

表格1

  • 约翰
  • 玛丽
  • 查尔斯

表_2

  • 史密斯
  • 好人
  • 衬套

表格结果

  • 约翰 | 史密斯
  • 玛丽 | 好人
  • 查尔斯 | 衬套

表应该总是有相同数量的项目,但如果没有,不存在的项目可以用 null 填充,如“henrry | null”。

也许可以先添加一个字段来为每一行编号,或者其他什么,但性能在这里很关键。

4

3 回答 3

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

这仅在两个表具有相同行数时才有效。如果没有,您将丢失数据...

祝你好运。

于 2013-02-02T16:26:37.397 回答
0

如果您想要性能,只需使用整数主键,但您确实需要键。您不能也不应该按照您描述的方式进行操作。:)

于 2013-02-02T16:18:30.443 回答
0

编辑:

鉴于您的要求是专门为实现随机结果,我认为您可以使用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到数据库中。

于 2013-02-02T16:27:08.313 回答