我有这个问题:
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,如果在两个查询中找到正确的记录。我不能为我的生活弄清楚发生了什么。非常感谢任何帮助。
答案 0 :(得分:1)
你需要使用LEFT JOIN和matierial_types,因为这个表可能没有相同的materialType id书籍 试试这个
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`
答案 1 :(得分:0)
看起来你在'Book'中没有对应于'accession_number'为0936的项目的条目。正确加入项目应该揭示:
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`