在一个变量的同一个表中查询多行

时间:2013-03-01 01:26:14

标签: mysql join

我有一个像这样的表格设置:

  

session_id | event_id |主持人| speaker_1 | speaker_2 | speaker_3 | ...继续扬声器_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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

您可以使用in子句中的where执行此操作:

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)