2017-01-26 3 views
1

SQLに問題があり、私が間違っていることを実際には得られません。私は2つのテーブルを持っていて、Table1をTable 2の1つのエントリに置き換えたいと思う。これはうまくいくが時間はかかる。明確にするために、Table1には20個のエントリがあり、Table2には400個のエントリがあります。だから各エントリ20回。SQL - LEFT JOINのエントリ時間

だからここに私がやろうとしているものです:

Table1 
|Name  |FullName |Size  | 
+---------+----------+----------+ 
|File1 |C:\File1 |8923749343| 
|File2 |C:\File2 |3475873758| 
+---------+----------+----------+ 

は通常そこに20件のエントリがありますが、今2のために十分なはずです。今表2代わりの表1からのFullName表1を取得している

Table2 
|FullName |CopyName |Name  | 
+---------+----------+----------+ 
|www\File1|C:\File1 |File1  | 
|www\File2|C:\File2 |File2  | 
+---------+----------+----------+ 

私の目標。 私が試したもの:

Table1 
|Name  |FullName |Size  | 
+---------+----------+----------+ 
|File1 |www\File1 |8923749343|  
|File1 |www\File1 |8923749343| 
|File2 |www\File2 |3475873758| 
|File2 |www\File2 |3475873758| 
+---------+----------+----------+ 

これは私が欲しいものです::

SELECT t1.Name, t2.FullName, t1.Size 
FROM Table1 t1, Table2 t2 
LEFT JOIN Table1 ON Table1.FullName=Table2.CopyName; 

これは私が得たものである

Table1 
|Name  |FullName |Size  | 
+---------+----------+----------+ 
|File1 |www\File1 |8923749343| 
|File2 |www\File2 |3475873758| 
+---------+----------+----------+ 

をだから、技術的には、私は右のそれを得たが、何らかの理由でそれがタイミング。ここで私はそれぞれ2回、私のオリジナルで20回ずつ試してみました。私は間違って何をしていますか?

アドバイスありがとうございます!

答えて

2

は、FROM句にカンマを使用します。 常には、適切で明示的なJOIN構文を使用します。

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

SELECT t1.Name, t2.FullName, t1.Size 
FROM Table2 t2 LEFT JOIN 
    Table1 t1 
    ON t1.FullName = t2.CopyName; 

あなたのクエリは、Table1への2つの参照を持っています。したがって、実際のJOINの間にデカルト積が得られます。

+0

をその行を削除してくださいああ、右手のひらを顔に当てる* *そのことについてあなたの助けに感謝を忘れてしまいました! – Tobe

2

あなたは「、表2のT2" をクエリから

SELECT t1.Name, t2.FullName, t1.Size 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.CopyName=t1.FullName;