0

私は次のようなテーブル設定をしています:

session_id | event_id | モデレーター| Speaker_1 | スピーカー_2| Speaker_3 | ...speaker_10に進み続けます

私がやろうとしているのは、1つの変数を検索して"speakerid = 13245"行をチェックするクエリを設定することです

'moderator'、'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

フィールドに「speakerid=12345」が含まれている行を返すには、LIKEwithを使用する必要があると思います。OR

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

このテーブルを正規化し、セッション/イベントのテーブルと、3番目のsesssions_speakerテーブルを介してそれに関連するスピーカーのテーブルを用意する必要があるようです。そうすれば、12人以上のスピーカーが参加するイベントがあるときに、テーブルスキーマを変更する必要がありません。

そうは言っても、このようにクエリを実行して、必要な結果を得ることができます

SELECT session_id
FROM table
WHERE
moderator = ?
OR speaker_1 = ?
OR speaker_2 = ?
...
OR speaker_11 = ?
于 2013-03-01T01:32:14.383 に答える
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)
于 2013-03-01T01:53:33.267 に答える