我有一个像这样的表格设置:
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多年了,这是我的第一篇文章。
答案 0 :(得分:1)
我认为您只需要使用LIKE
和OR
来返回任何字段包含“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)