我是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,所以我想获得与其132相关联的text_data也是“可用”的所有127个。我最初使用子查询完成了查询,但我认为这样做是一种更有效的方法,只要我能做到正确!
以上内容目前正在返回重复记录,如果我替换“或”#39;用'和'我没有记录。任何人都可以帮忙吗?
答案 0 :(得分: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且属性为132的记录与USABLE相关
如果是你想要的,那么查询应该是:
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的建议,我在查询中使用了简单的内部联接。只有当你想从一个表中获取记录时才需要使用外连接,即使其他表不包含它们也是如此。