pub trait JoinSelect {
type Table: Table;
type Fields: Default;
// Required method
fn write_join_select(&self, sql: &mut String);
// Provided method
fn select(self) -> SelectStatement<Self, WildCard>
where Self: Sized { ... }
}