-6

私は2つのテーブルを持っています:

t1:

SSN            NAME       LAST       AD           SAL
-------------- ---------- ---------- ----- ----------
s1             paps                              2600
s2             raj                               1500
s3             rahul

t2:

SSN        NAME       LAST       AD           SAL
---------- ---------- ---------- ----- ----------
s1                    mukh       sbc
s2                    sar        mdn
s3                    das        tly          1100

これら2つのテーブルを1つにマージしたい

t3:

ssn  name  last   ad   sal
---- ----- ----- ---- ----
s1   paps  mukh  sbc  2600
s2   raj   sar   mdn  1500
s3   rahul das   tly  1100 

これどうやってするの?

4

5 に答える 5

2

テーブルをマージするには 4 つの方法があります。

  • まず、クエリを作成すると、マージのように結果が得られます。

単純な結合:

tsql

  • または、クエリによって値がリアルタイムで更新される新しいテーブルであるビューを作成することもできます。

ビューの使用:

create or replace view t3 as
select ssn, t1.name, t2.last, t2.ad, MAX(t1.sal, t2.sal)
  from t1, t2
 where t1.ssn = t2.ssn;
  • または 3 番目のオプションとして、前のテーブルの値に基づいて新しいテーブルを作成することができます。

または新しいテーブルを作成し、他の2つの値を挿入します

create table t3 (ssn, name, last, ad, sal);
insert into t3 select ssn, t1.name, t2.last, t2.ad, MAX(t1.sal, t2.sal)
                 from t1, t2
                where t1.ssn = t2.ssn;

あなたは武器の選択を持っています!:-)

クエリについては、例で書いたものよりも複雑な結合を作成することをお勧めします。つまり、次のようになります。

select * 
  from t1, t2 
 where t1.ssn = t2.ssn 
   and t1.name = t2.name 
   and (t1.last = t2.last 
     or t1.ad = t2.ad 
     or t1.sal = t2.sal);

t3 結合テーブルの値のロジックを実際に理解していないため、条件として何が必要かわかりません。abcどこからともなく来る文字列を持つコラム広告のように。ただし、前のクエリを に置き換えANDて選択動作を変更し、式を追加して値を選択することができます...ORIF()

わかりました、次に、ニーズに合った確認済みのクエリを次に示します (sal数字の場合)。

select t1.ssn, t1.name, t2.last, t2.ad, MAX(t1.sal, t2.sal)
  from t1, t2
 where t1.ssn = t2.ssn;

また

select t1.ssn as ssn, 
       t1.name as name, 
       t2.last as last , 
       t2.ad as ad, 
       if(t1.sal is null,t2.sal,t1.sal) as sal
  from t1, t2
 where t1.ssn = t2.ssn;

また

select t1.ssn as ssn, 
       t1.name as name, 
       t2.last as last , 
       t2.ad as ad, 
       case when s1.sal is null 
            then s2.sal 
            else s1.sal 
        end as sal
  from t1, t2
 where t1.ssn = t2.ssn;
于 2013-06-09T23:35:08.037 に答える
1

あなたはテーブルを「マージ」したいと言っていますが、いくつかの仮定なしで自信を持って答えるのに十分な詳細を提供していません. 次の 3 つの質問が思い浮かびます。

  1. 重複する行がある場合、どちらかのテーブルが優先されますか?
  2. 2 つのテーブルの行数は常に同じですか?
  3. 2 番目のテーブルの項目を 1 列ずらしていますか?

あなたのデータに基づくと、Table1 が優先されます。3 行だけのサンプルから (2) を仮定するのは好きではありません。(3) がデータの構造であるため、(3) と仮定します。

したがって、これを行う方法は次のfull outer joinとおりです。

select  coalesce(t1.ss1, t2.ssn) as ssn, t1.NAME,
        coalesce(t1.last, t2.name) as last,
        coalesce(t1.ad, t2.last) as ad,
        coalesce(t1.sal, t2.sal) as sal
from table1 t1 full outer join
     table2 t2
     on t1.ssn = t2.ssn;
于 2013-06-10T02:03:26.480 に答える
0
SELECT t1.ssn,t1.name,t2.name,t2.ad,t1.sal FROM table t1 JOIN table t2 on t1.ssn=t2.ssn

これを試してみてください

于 2013-06-10T01:36:39.077 に答える
0

に表示されているデータに基づいて、とにマッピングするときt3の関係を次のように想定しています。t1t2t3

t3.ssn  = (t1.ssn && t2.ssn)
t3.name = t1.name
t3.last = t2.name
t3.ad   = t2.last
t3.sal  = t1.sal, unless null; t2.sal otherwise

これらの一致が正しければ、次のクエリでデータを取得t1t2て挿入できるはずです。t3

INSERT INTO t3 (ssn, name, last, ad, sal) (
    SELECT
        t1.ssn, t1.name, t2.name, t2.last, IF(t1.sal IS NOT NULL, t1.sal, t2.sal)
    FROM
        t1
        JOIN t2 ON t1.ssn = t2.ssn
);
于 2013-06-09T23:36:46.560 に答える
0
SELECT
    * 
 FROM t1
  UNION ALL
 SELECT
   *
 FROM t2
于 2013-06-09T23:34:21.790 に答える