0

この他の質問で説明されているのと同じ問題があります。

MySQL / PHP 常に共通の列を持たずにテーブルを結合する

しかし、私のテーブルには共通のフィールドがなく、「最初のものと最初のもの」、「2番目のものと2番目のもの」などを結合したいだけです。

例:

表1

  • ジョン
  • メアリー
  • チャールズ

テーブル_2

  • スミス
  • いい男
  • ブッシュ

テーブル結果

  • ジョン | スミス
  • メアリー | いい男
  • チャールズ | ブッシュ

テーブルには常に同じ量のアイテムが含まれている必要がありますが、そうでない場合、存在しないアイテムは「henrry | null」のように 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.

次のフィドルは、これを実証するための私の努力を捉えています。

--

それ以外の場合、データが本当に一定である場合 (その場合、なぜデータベースを使用しているのですか?)、一貫した結果が得られる可能性がありますが、キーを簡単に定義して処理を完了することができます。そうでない場合は、データベースを拡張したときに「存在しない [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データベースに追加できません。

于 2013-02-02T16:27:08.313 に答える