2013-03-01 36 views
0

我有一個表的設置是這樣的:查詢在同一個表多行的一個變量

SESSION_ID | event_id |版主| speaker_1 | speaker_2 | speaker_3 | ......一直要speaker_10

我所試圖做的是安裝,搜索1個可變"speakerid = 13245"查詢和檢查行

「主持人」,「speaker_1」,「speaker_2」, 'speaker_3', 'speaker_4', 'speaker_5', 'speaker_6', 'speaker_7', 'speaker_8', 'speaker_9', 'speaker_10'

然後回到每一個 'SESSION_ID' 對應於包含speakerid任何行在11個揚聲器行中的任何一行中均爲12345。

我知道它與INNER JOIN有關,但經過大量搜索後,我找不到足夠具體的東西。多年來我一直在使用stackoverflow,這是我的第一篇文章。

回答

0

我想你只需要使用LIKEOR返回其中的任何字段包含行「speakerid = 12345」:

SELECT Session_Id 
FROM YourTable 
WHERE Moderator Like '%speakerid = 13245%' 
    OR speaker_1 Like '%speakerid = 13245%' 
    OR ... 
0

你應該對數據庫規範化讀了爲speaker_n列是一個不好的跡象。您可能需要Speakers表和「Session-Speakers」映射表。這肯定讓你更方便的查詢,但現在你別無選擇,只能搜索所有列:

SELECT sesion_id FROM t1 WHERE 
    moderator = '12345' 
    OR speaker_1 = 12345 

0

聽起來真是你需要規範化此表,並有會議表/活動以及通過第三個sesssions_speaker表格與其相關的發言人表格。這樣,當您有12個以上揚聲器的事件時,您無需更改表格模式。

話雖這麼說,你可以查詢這樣得到你需要

SELECT session_id 
FROM table 
WHERE 
moderator = ? 
OR speaker_1 = ? 
OR speaker_2 = ? 
... 
OR speaker_11 = ? 
0

您可以在where子句中做到這一點使用in結果:

select session_id 
from t 
where 13245 in (moderator, speaker_1, speaker_2, speaker_3, speaker_4, 
       speaker_5, speaker_6, speaker_7, speaker_8, speaker_9, 
       speaker_10)