1

MYSQL 環境で単純な左結合があります。

SELECT *
FROM (`holiday`)
LEFT JOIN `member` ON `member`.`memberId` = `holiday`.`memberId`
ORDER BY `holiday`.`begin_date` ASC 

ただし、完全一致のみを返すのではなく、member.memberId の最初の文字が holiday.memberId であるすべてのレコードを返します。

結果:

holidayId holiday.memberId member.memberId
9         1                1
9         1A65152F         1
10        1                1
10        1A65152F         1

完全一致を返すようにするにはどうすればよいですか?

4

1 に答える 1

4

フィールドholiday.memberIdは STRING ですmember.memberIdが、 は INTEGER であるため、MySQL は自動的に文字列を Number にキャストします (たとえば、「123ABC」は 123 に変換されます)。

これを試すことができます:

SELECT *
FROM (`holiday`)
LEFT JOIN `member` ON `member`.`memberId` = BINARY `holiday`.`memberId`
ORDER BY `holiday`.`begin_date` ASC

BINARY を使用すると、バイナリ比較が強制され、自動キャストが無効になります。

または、両方のフィールドを文字列に変換する必要があります。

于 2013-06-24T13:03:42.167 に答える