0

我有一个这样的表设置:

session_id | event_id | 版主 | 扬声器_1 | 扬声器_2 | 扬声器_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'

然后返回对应于任何 11 个扬声器行中包含 speakerid = 12345 的任何行的每个“session_id”。

我知道它与 INNER JOIN 有关,但经过大量搜索后,我找不到任何足够具体的东西。我多年来一直关注stackoverflow,这是我的第一篇文章。

4

4 回答 4

1

您可以inwhere子句中使用:

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)
于 2013-03-01T01:53:33.267 回答
1

我认为您只需要使用LIKEwithOR即可返回任何字段包含“speakerid = 12345”的行:

SELECT Session_Id
FROM YourTable
WHERE Moderator Like '%speakerid = 13245%' 
   OR speaker_1 Like '%speakerid = 13245%' 
   OR ...
于 2013-03-01T01:30:45.923 回答
1

您应该阅读数据库规范化,因为speaker_n列是一个不好的迹象。您可能需要一个Speakers表和一个“Session-Speakers”映射表。这肯定会使您的查询更容易,但现在您别无选择,只能搜索所有列:

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

等等

于 2013-03-01T01:31:37.243 回答
1

听起来您确实需要规范化此表,并通过第三个 sessions_speaker 表拥有一个会话/事件表和一个与之相关的演讲者表。这样,当您有超过 12 位发言人的活动时,您无需更改表架构。

话虽如此,您可以像这样查询以获得所需的结果

SELECT session_id
FROM table
WHERE
moderator = ?
OR speaker_1 = ?
OR speaker_2 = ?
...
OR speaker_11 = ?
于 2013-03-01T01:32:14.383 回答