1

私はこのクエリを持っています:

SELECT `gift_donations`.*, `scholarships`.`name` AS scholarship_name
FROM (`gift_donations`)
LEFT
    OUTER JOIN `scholarships` scholarships ON `scholarships`.`id` =
    `gift_donations`.`scholarship_id`
WHERE `gift_donations`.`contact_id` =  '13'
AND
    `gift_donations`.`in_memory` REGEXP '[a-zA-Z]+' OR in_honor REGEXP '[a-zA-Z]+'
ORDER BY
    `gift_donations`.`id` desc

ご覧のとおり、ここでは、あるレコードのみcontact_id13を取得しようとしていますが、問題は、結果セットにcontact_idそうでない他のレコードも含まれていることです。13

なぜそうなのですか、または私が必要とする他の番号のREGEXPレコードのみを返すようにクエリを作成していないためですか?contact_id13

4

4 に答える 4

5

ANDよりも優先されORます。AND2 番目の句を次のような括弧で囲む必要があります

(`gift_donations`.`in_memory` REGEXP '[a-zA-Z]+' OR in_honor REGEXP '[a-zA-Z]+')

そのまま、あなたは本質的にwhere句に従って書いています

A and B or C

演算子の優先順位により、次と同等です

(A and B) or (C)

に変更する必要があります

(A) and (B or C)

すべての演算子の優先順位については、MySQL リファレンス マニュアルを参照してください。

括弧を使用して明示することは常に良い考えであることに注意してください

于 2013-05-30T08:13:10.357 に答える
1

ブラケットを使用します。

WHERE `gift_donations`.`contact_id` =  '13'
AND
   ( `gift_donations`.`in_memory` REGEXP '[a-zA-Z]+' OR in_honor REGEXP '[a-zA-Z]+')
ORDER BY
    `gift_donations`.`id` desc
于 2013-05-30T08:13:41.533 に答える
1

WHERE句に括弧 () を入れるのを忘れました:

SELECT `gift_donations`.*, `scholarships`.`name` AS scholarship_name
FROM (`gift_donations`)
LEFT
    OUTER JOIN `scholarships` scholarships ON `scholarships`.`id` =
    `gift_donations`.`scholarship_id`
WHERE  `gift_donations`.`contact_id` =  '13'
AND
    ( `gift_donations`.`in_memory` REGEXP '[a-zA-Z]+' OR in_honor REGEXP '[a-zA-Z]+' )
ORDER BY
    `gift_donations`.`id` DESC
于 2013-05-30T08:14:00.740 に答える
0

これは、contact_id が 13 ではないレコードを取得している可能性があります

OR in_honor REGEXP '[a-zA-Z]+'
于 2013-05-30T08:14:18.923 に答える