2012-08-15 84 views
0

如果有人在這裏可以提前致謝。 我有這樣的兩個表:SQL多選基於單個表上的鍵

 Strings    Numbers 
----------------  ---------------- 
| ID | String |  | ID | Number | 
----------------  ---------------- 
| 1 | 'A' |  | 1 | 'First' | 
| 1 | 10 |  | 2 | 'Second' | 
----------------  | 3 | 'Third' | 
| 2 | 'B' |  | 4 | 'Fourth' | 
| 2 | 11 |  | 5 | 'Fifth' | 
----------------  ---------------- 
| 3 | 'A' | 
| 3 | 12 | 
---------------- 
| 4 | 'B' | 
| 4 | 13 | 
---------------- 
| 5 | 'B' | 
| 5 | 14 | 
---------------- 

例如,我過濾器「相關的」用「A」的價值觀,我一定要得到這樣一個表:

 Strings 
---------------- 
| ID | String | 
---------------- 
| 1 | 10 | 
---------------- 
| 3 | 12 | 
---------------- 

並且例如,如果想過濾器「相關的」與「B」的價值觀,我得一個表是這樣的:

 Strings 
---------------- 
| ID | String | 
---------------- 
| 2 | 11 | 
---------------- 
| 4 | 13 | 
---------------- 
| 5 | 14 | 
---------------- 

再次感謝,如果你能幫助我。

+1

您使用的是什麼rdbms? sql-server,mysql? – Taryn 2012-08-15 22:22:38

回答

0
SELECT * FROM Strings WHERE string = "A" 

根據需要替換*的字段名稱。

2

除非我失去了一些東西,你可以使用:

select s1.id, s1.string 
from strings s1 
inner join strings s2 
    on s1.id = s2.id 
    and s1.string != 'A' 
    and s2.string = 'A' 

SQL Fiddle with Demo

或者

select s1.id, s1.string 
from strings s1 
inner join strings s2 
    on s1.id = s2.id 
    and s1.string != 'B' 
    and s2.string = 'B' 

SQL Fiddle with Demo

+0

@daleotar請參閱我的編輯 – Taryn 2012-08-15 22:24:44

+0

+1,但是如果我使用WHERE代替第一個AND,那麼是否有任何性能差異 - 像這裏http://sqlfiddle.com/#!3/92816/8 – exexzian 2013-08-01 16:26:17

+0

@ sansix您是否回顧了兩者的執行計劃?你會注意到它們是相同的 - http://sqlfiddle.com/#!3/92816/12 – Taryn 2013-08-01 16:31:22

0
select s2.ID, 
     s2.String 
    from Strings as s1 
inner join Strings as s2 
    on s2.id = s1.id 
    and s2.String != s1.String 
where s1.String = ? 

但是,這個表結構是有問題的。 ID似乎應該是主鍵,但它不可能是因爲有多個值。你也不需要數字表,所以爲什麼把它包含在問題中? :)