其他的答案都正確地指出,缺少from
關鍵字和group by
和order by
條款的順序錯誤。遵循你到達那裏的建議應該沒有問題。
另一件事是你用來連接表的語法。雖然從技術上講不是一個錯誤,但它被認爲是過時的。較新的標準提供了專門的加入關鍵字,它允許您將加入邏輯與按值過濾邏輯分開,以前根據舊標準,必須將其混合在一個子句WHERE
子句中。
讓我通過重寫FROM
和WHERE
子句來展示此內容,以便您可以看到差異。首先,這裏是你的當前連接的邏輯實現:
FROM serialNumber_tbl AS sn,
Entitlement_tbl AS ent,
Company_tbl AS c
WHERE sn.serialNumberId = ent.serialNumberId
AND c.companyId = sn.companyId
的WHERE
子句中的兩個條件是連接條件。下面是相同的代碼片段時,與新的語法進行修改:
FROM serialNumber_tbl AS sn
INNER JOIN Entitlement_tbl AS ent ON sn.serialNumberId = ent.serialNumberId
INNER JOIN Company_tbl AS c ON c.companyId = sn.companyId
在這種情況下,WHERE
條款完全消失了,當然,但你不應該有錯誤的印象是,它總是這樣。通常WHERE
條款仍然有效且有用。如果它包含一些不屬於加入邏輯的其他條件,則它們將在WHERE
子句中保留那些位置。我在談論像ent.Date < '19900101' AND c.CompanyName NOT IN ('IBM', 'Microsoft')
這樣的條件。
就像我之前所說的那樣,使用目前使用的較舊的語法,該條件將與連接條件在一個子句中。在更簡單的情況下,像您的情況一樣,它可能會被忽略而沒有問題,但在更復雜的查詢中,如果不是可怕的話,它可能成爲一個問題,即使不是噩夢。所以重點是在開始編寫這樣複雜的查詢之前習慣新的語法。
謝謝!我學到了新的東西=) – Donut 2011-04-13 04:13:59