Isso não tem nenhum efeito:
batTmp.fields("book_id", "amount");
Considerando que isso apenas renomeia a tabela, não as colunas:
batTmp.as("bat")
Escreva isso em vez disso:
batTmp.as("bat", "book_id", "amount")
batTmp.fields("book_id", "amount");
batTmp.as("bat")
batTmp.as("bat", "book_id", "amount")