0

2 つのテーブル

tblEatables と tblConfirm_Eatables

tblEatables

スノーネーム  
りんご1個
オレンジ2個
3 パパイヤ
4 ジャックフルーツ
5 パイナップル
6 マンゴー

tblConfirm_Eatables

Eatbles_Id Confirm_Status
     1 0
     2 1
     3 0
     4 0

質問1

以下のクエリが繰り返しレコード セットをもたらす理由

SELECT E.Name         
FROM Eatables E INNER JOIN 
Confirm_Eatables CE ON CE.Eatbles_Id != E.Sno 

<> を使用したにもかかわらず、以下のクエリがテーブルからすべての eatbles を取得する理由

SELECT E.Name         
FROM Eatables E INNER JOIN 
      Confirm_Eatables CE ON E.Sno != CE.Eatbles_Id
GROUP BY E.Name

OP

名前
りんご
ジャックフルーツ
マンゴー
オレンジ
パパイヤ
パイナップル
4

3 に答える 3

1

あなたが望むのは次のとおりだと思います:

SELECT a.Name
FROM tblEatables a
LEFT JOIN tblConfirm_Eatables b ON a.Sno = b.Eatables_Id
WHERE b.Eatables_Id IS NULL

tblEatablesにないすべての行を取得しますtblConfirm_Eatables

これがどのように機能するかをよりよく理解するには、このリンクを参照して、SQL で結合を使用するための優れたビジュアル ガイドを参照してください。特に、下の 4 つ目では、LEFT JOIN/IS NULL手法を使用して、テーブル B に一致しないテーブル A のすべてのレコードを取得しています。

于 2012-07-26T08:09:46.843 に答える
1

ページの上部にさまざまな JOIN の優れた例があります http://www.sql-tutorial.ru/en/book_explicit_join_operations/page1.html

私にとっては、結合クエリで = を使用し、その後で EXCEPT を使用することをお勧めします。あなたの方法で:

  SELECT E.Name FROM Eatables 
                EXCEPT ALL
  SELECT E.Name FROM Eatables E INNER JOIN 
         Confirm_Eatables CE ON CE.Eatbles_Id = E.Sno 
于 2012-07-26T08:08:10.467 に答える
0

このE.Sno != CE.Eatbles_Id条件はWHERE節で使用する必要があります。

結合で演算子を使用!=すると、予期しない結果が生じます。

于 2012-07-26T08:02:39.657 に答える