0

SQL は初めてです。投稿を確認しましたが、質問に対する答えがわかりませんでした。join 句で where/ or ステートメントを使用して、単純なクエリであると思われることを実行しようとしています。

問題は、重複しているように見えることです。私が使用しているコードは次のとおりです。

  select A.[AuctionId], AA.attribute_id
  from [auction] A
  left join [auction_attribute] AA
  on AA.auction_id = A.AuctionId
  where AA.attribute_id = 127
  or (AA.attribute_id = 132 and AA.text_data = 'USABLE')  

属性 ID が 127 のすべてのレコードを取得したいのですが、レコードの属性 132 には関連付けられた text_data 'USABLE' が必要です。レコードは複数の属性 ID を持つことができるので、132 に関連付けられた text_data も「USABLE」であるすべての 127 を取得したいと考えています。もともとサブクエリを使用してクエリを実行していましたが、正しく実行できれば、これがより効率的な方法になると思います。

上記は現在、重複したレコードを返しています。「または」を「and」に置き換えると、レコードが取得されません。誰か助けてください??

4

1 に答える 1

2

編集 : Turophile ごとに提案されているように、左外部結合を単純な内部結合に置き換えます (感謝)

実際のクエリの意味は次のとおりです。

値 127 の属性を持つすべてのレコードと、USABLE に関連付けられた属性値 132 を持つすべてのレコードを取得します。

それが本当に必要なものであるが、重複がない場合、クエリは次のようになります。

select distinct A.[AuctionId], AA.attribute_id
from [auction] A
     join [auction_attribute] AA
         on AA.auction_id = A.AuctionId
where    AA.attribute_id = 127
     or (AA.attribute_id = 132 and AA.text_data = 'USABLE')

あなたの説明は次のようです:

127 AND の属性と、USABLE に関連付けられた 132 の属性を持つレコードを取得します

それがあなたが望むものであれば、クエリは次のようになります:

select A.[AuctionId], AA.attribute_id, AA2.attribute_id
from [auction] A
     join [auction_attribute] AA
         on AA.auction_id = A.AuctionId
     join [auction_attribute] AA2
         on AA2.auction_id = A.AuctionId
where    AA.attribute_id = 127
     and (AA2.attribute_id = 132 and AA2.text_data = 'USABLE')

SQL です。別のエイリアスを指定すれば、同じテーブルを何度も使用できます。

編集: Turophile が提案したように、クエリで単純な内部結合を使用しました。外部結合は、別のテーブルにレコードが含まれていない場合でも、あるテーブルからレコードを取得する場合にのみ使用する必要があります。

于 2014-09-22T05:56:04.000 に答える