-1

この構文を機能させる方法:

SELECT * 
FROM
  uploads,
  audienceuploadassociation 
WHERE 
  uploads.member_id = '1'
  AND uploads.member_school_id='1' 
  AND subject = 'Maths' 
  AND uploads.upload_id = audienceuploadassociation.upload_id 
  AND topic = 'Integers' 
  AND year IN(7, 8, 9) 
  AND audienceuploadassociation.audiencename LIKE (Parents, Teachers, Community)
4

2 に答える 2

3

あなたのLIKE条項は間違っています。代わりに句を使用するIN()つもりだと思います。

AND audienceuploadassociation.audiencename IN ('Parents', 'Teachers', 'Community')

部分的な文字列を と一致させようとしている場合は、次のように、それらをグループにまとめるLIKE必要があります。OR()

AND (
  audienceuploadassociation.audiencename LIKE 'Parents%'
  OR audienceuploadassociation.audiencename LIKE 'Teachers%'
  OR audienceuploadassociation.audiencename LIKE 'Community%'
)

また、使用している暗黙的な結合構文 (カンマ区切りのテーブル) は、明示的なJOIN.

SELECT
  uploads.*,
  audienceuploadassociation.*
FROM
  /* Explicit JOIN  with ON clause */
  uploads
  JOIN audienceuploadassociation ON uploads.upload_id = audienceuploadassociation.upload_id 
WHERE 
  uploads.member_id = '1'
  AND uploads.member_school_id='1' 
  AND subject = 'Maths' 
  AND topic = 'Integers' 
  AND year IN(7, 8, 9) 
  AND audienceuploadassociation.audiencename IN ('Parents', 'Teachers', 'Community')

最後に、必要な列を実行するのではなく、明示的に名前を付けることをお勧めしますSELECT *。これにより、それらを決定論的な順序で取得し、後でこのクエリで必要のない他の列を追加しないように保護できます。

SELECT 
  uploads.upload_id,
  uploads.other_column,
  uploads.topic,
  audienceuploadassociation.audiencename,
  ...
  ...
于 2012-05-25T16:07:12.143 に答える
0

これは機能しますか?

SELECT * 
FROM
  uploads,
  audienceuploadassociation 
WHERE 
  uploads.member_id = '1'
  AND uploads.member_school_id='1' 
  AND subject = 'Maths' 
  AND uploads.upload_id = audienceuploadassociation.upload_id 
  AND topic = 'Integers' 
  AND year IN(7, 8, 9) 
  AND audienceuploadassociation.audiencename IN ('Parents', 'Teachers', 'Community');
于 2012-05-25T16:07:39.100 に答える