2014-09-22 110 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