2015-04-01 58 views
4

我已經使用SQL數據庫工作了大約20年,似乎無法理解Knex映射查詢的方式。有人能幫我得到正確的代碼嗎?如何從Knex.js中的連接表中選擇特定列?

我有我想在我的應用程序的NodeJS使用此SQL查詢:

SELECT p.id, p.project_number, p.project_name, p.start_date, p.end_date, 
    o.name, o.email_addr, 
    c.company, c.email_addr AS company_email, c.first_name, c.last_name 
FROM projects p 
INNER JOIN owners o ON o.id = p.owner_id 
INNER JOIN clients c ON c.id = p.client_id 

KnexJS(0.7.5)文檔顯示的例子,看起來像這樣我的查詢:

knex.from('projects').innerJoin('owners', 'owners.id', 'projects.owner_id') 
    .innerJoin('clients', 'clients.id', 'projects.client_id'); 

在文檔中找不到幾件事:

1)如何選擇我想包含的列?項目,客戶和業主每個都有20到50列,我對他們都不感興趣。從主表中選擇列已清除(使用select()column()),但如何從連接表中選擇列?

2)一些列具有相同的名稱。我如何避免名稱衝突(即向其他表的列添加一些前綴)?我看着Knex可以生成列別名(... AS)的方式,我不確定這是更復雜查詢的可行選項。 (即使是相對簡單的查詢,如上面的那個)

回答

8

你可以試試:

knex('projects').select(['projects.id', 'projects.project_number', 'projects.project_name', 'projects.start_date', 'projects.end_date', 
    'owners.name', 'owners.email_addr as owner_email_addr', 
    'clients.company', 'clients.email_addr as client_email_addr', 'clients.first_name', 'clients.last_name']) 
.innerJoin('owners', 'owners.id', 'projects.owner_id') 
.innerJoin('clients', 'clients.id', 'projects.client_id'); 

希望這有助於!

相關問題