2014-09-22 74 views
0

即时通讯新的SQL - 我已经看了整篇文章,但无法完全解决我的问题的答案抱歉。我试图做我认为应该是一个简单的查询,在我的连接子句中使用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“保质”,如果是有道理的?一个记录可以有多个属性ID,所以我想获得所有127个与其132关联的text_data也是'可用'的。我最初使用子查询完成了查询,但我认为这将是一种更有效的方法,只要我能够做到这一点就行!

以上是目前返回重复的记录,如果我用'和'替换'或',我就没有记录。任何人都可以帮忙吗?

+3

Hello Cathy!欢迎来到StackOverflow。请提及以下内容:1.什么是您的数据库服务器(是MySQL还是SQL Server或Oracle)2.您的查询的实际输出是什么? 3.您的预期产出是多少?另外,如果你发布你的表格结构将会更加谨慎。 – 2014-09-22 05:17:18

+0

您需要先了解基本的数据库结构,包括主键和外键。做那些谷歌和试图理解他们,然后回来编辑你的问题。 – Rachcha 2014-09-22 05:20:14

+0

重复记录使用DISTINCT – slek 2014-09-22 05:49:27

回答

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的属性记录和和相关的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所建议的,我在查询中使用了简单的内部连接。只有当你想从一个表中获取记录时才需要使用外连接,即使其他表不包含它们。

+0

Upvoted因为我认为答案的最后一部分是提问者想要的。这里是一个小提琴来演示它的行动:http://sqlfiddle.com/#!3/1bf29/5 – Turophile 2014-09-22 07:01:21

+0

此外,(为了提问者的利益),这些连接可能是标准的内部连接,而不是左外部连接。 – Turophile 2014-09-22 07:21:29