2

そのうちの 1 つで、販売者が販売している製品のレコードを保存する 2 つのテーブルがあります。別のテーブルでは、購入者は購入する必要があるものを保存します。

sales テーブルの特定の製品に一致する、buyers テーブルからユーザー ID (uid フィールド) のリストを取得する必要があります。これは私が書いたものです:

select n.[uid] 
from needs n 
  left join ads(getdate()) a 
         on n.mid=a.mid 
        and a.[year] between n.from_year and n.to_year 
        and a.price between n.from_price and n.to_price 
        and n.[uid]=a.[uid] 
        and a.pid=n.pid

一致しないレコードを除外するには、where 句を使用する必要があります。ONこれらの条件はすべてwhere 句で定義する必要があると定義されていると思います。ただし、結合には少なくとも 1 つのON句が必要です。2 つのテーブルを結合するべきではありませんか? 私に何ができる?

4

1 に答える 1

2

LEFT JOINJOIN、より正確にはOUTERINNERはそれぞれ結合するという重要な違いがあります。

内部結合では、結合の両側が一致する必要があります。つまり、次の場合:

  • 人を表すテーブルがありました
  • 自動車を表す別のテーブルがありました
  • 各自動車には PersonId がありました
  • ONPersonIdを使用してこれらのテーブルを結合しました

を使用LEFT (OUTER) JOINすると、自動車を持っていない人も含め、すべての人が返されます。INNER JOIN車を持っている人だけを返します。

この記事が役立つかもしれません: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2013-09-20T06:54:17.050 に答える