2

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

SELECT Book.title, Book.copyright, Book.publisher, Book.id,
    MaterialType.type, Item.id as item_id, 100 as relevance FROM `books` AS `Book`
inner JOIN `material_types` AS `MaterialType` ON (`MaterialType`.`id` = `Book`.`material_type_id`)
inner JOIN `items` AS `Item` ON (`Item`.`book_id` = `Book`.`id` AND `Item`.`accession_number` = '0936')
WHERE 1 = 1  GROUP BY `Book`.`id`

何も引き上げません。ただし、このクエリを実行すると、正しいレコードが見つかります:

SELECT * FROM `items` AS `Item` WHERE `Item`.`accession_number` = '0936'

ただし、最も奇妙な部分は、それが機能する他のレコードです。accession_number 0396 を使用すると、両方のクエリで正しいレコードが見つかった場合。私は一生、何が起こっているのか理解できません。どんな助けでも大歓迎です。

4

2 に答える 2

1

このテーブルには本の同じ materialType id がない可能性があるため、matierial_types で LEFT JOIN を使用する必要があります。これを試してください。

SELECT Book.title, Book.copyright, Book.publisher, Book.id,
    MaterialType.type, Item.id as item_id, 100 as relevance FROM `books` AS `Book`
LEFT JOIN `material_types` AS `MaterialType` ON (`MaterialType`.`id` = `Book`.`material_type_id`)
LEFT JOIN `items` AS `Item` ON (`Item`.`book_id` = `Book`.`id`) 
WHERE `Item`.`accession_number` = '0936'
GROUP BY `Book`.`id`
于 2012-05-13T17:02:05.047 に答える
0

'accession_number' が 0936 の項目に対応する 'Book' にエントリがないようです。Item への右結合により、次のことが明らかになります。

SELECT Book.title, Book.copyright, Book.publisher, Book.id,
    MaterialType.type, Item.id as item_id, 100 as relevance FROM `books` AS `Book`
left JOIN `material_types` AS `MaterialType` ON (`MaterialType`.`id` = `Book`.`material_type_id`)
right JOIN `items` AS `Item` ON (`Item`.`book_id` = `Book`.`id` AND `Item`.`accession_number` = '0936')
WHERE 1 = 1  GROUP BY `Book`.`id`
于 2012-05-13T17:07:18.080 に答える