0

我是 SQL 新手 - 我已经浏览了这些帖子,但无法完全解决我的问题的答案,抱歉。我正在尝试做我认为应该是一个简单的查询,在我的 join 子句中使用 where/ 或语句。

问题是我似乎得到了重复。这是我正在使用的代码:

  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,因此我想获取所有 127,其中与其 132 关联的 text_data 也是“可用”。我最初使用子查询完成了查询,但我认为这将是一种更有效的方法,只要我能做对!

以上内容目前正在返回重复记录,如果我用 'and' 替换 'or' 我没有得到任何记录。有人可以帮忙吗??

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')

您的描述似乎是:

获取与 USABLE 关联的属性为 127 AND 且属性为 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 回答