2

結果を次のようにしたいと思います

    FirstName1     LastName1         FirstName2      LastName2
       Amy           Smith              Bob            Stone
      Fred           Joker              Gina           White

FirstName1とFirstName2のデータ型は同じですが、結合に使用できるものはありません(同じ名前の人はいないと仮定します)。また、LastName1とLastName2についても同じことが言えます。
2つのテーブルを作成してみました。最初のテーブルには、FirstName1とLastName1が含まれています。2番目のテーブルにはFirstname2とLastName2が含まれています。
それから私は使用します

SELECT table1.FirstName1, table1.LastName1, table2.FirstName2, table2.LastName2
FROM table1, table2;

しかし、これは私に多くの重複を与えます。助言がありますか?

4

3 に答える 3

5
SELECT t1.FirstName1, t1.LastName1, t2.FirstName2, t2.LastName2
FROM
    (SELECT 
         FirstName1, 
         LastName1, 
         ROW_NUMBER() OVER (ORDER BY FirstName1) 'RowNumber'
     FROM table1
    ) AS t1
    FULL OUTER JOIN
    (SELECT 
         FirstName2, 
         LastName2, 
         ROW_NUMBER() OVER (ORDER BY FirstName2) 'RowNumber'
     FROM table2
    ) AS t2
    ON t1.RowNumber = t2.RowNumber

FULL OUTER JOIN2つのテーブルの行数が同じでない場合を処理します。

于 2012-11-17T04:11:51.640 に答える
0

「ああ、私は本当にそれをきれいに見せようとしているだけです。私はあらゆる種類の出力がかなり可能であるCとJavaでのプログラミングに慣れています。」

データベースプログラミングは異なります。この領域では、コンテンツは単なるかわいさよりも重要です。したがって、結果セットに関しては、データベースは、行のすべての列が意味のある関係を共有することを要求します(手がかりは名前のリレーショナルデータベースにあります)。

問題は、共通のキーがないテーブルがないため、2つの行セットを結合する方法がないことです。適切なWHERE句がないと、データベースはクロス結合、つまりデカルト積を実装し、そこからすべての複製が発生します。

意味のあるキーがない場合、唯一の選択肢はそれらを偽造することです。Vikdorが示したアプローチは、これを実現する1つの方法です。

于 2012-11-17T08:02:42.877 に答える
0

やろうとしていることを絶対にやるべきではありませんが、使ってみてくださいDISTINCT

SELECT Distinct 
    table1.FirstName1, 
    table1.LastName1, 
    table2.FirstName2, 
    table2.LastName2
FROM table1, table2;  

アプローチの問題は、取得したデータセットが意味をなさないことです。どうしてこんな風にやりたいの?

編集:あなたはいつでもこれを行うことができますこれを行う:

select table1.FirstName1, table1.LastName1, table2.FirstName2, table2.LastName2
from table1, table2   
where table1.rownum= table2.rownum;
于 2012-11-17T03:37:29.973 に答える