2014-04-15 103 views
0

我有更多使用Access的經驗,我將在小部件中構建我的分析並查詢每個新視圖。查詢查詢

我不想在SQL中做一些簡單的事情。

如果我有格式的查詢:

SELECT events.people, COUNT(events.eventType) AS usersAndEventCount 
FROM theDB.events 
WHERE event_id = 884 
GROUP BY people 

然後我要查詢usersAndEventCount 像這樣:

usersAndEventCount; 
events 
theDB.events 

這必須:

Select usersAndEventCount.people, usersAndEventCount.events 
FROM [from where actually?] 

從嘗試對SO上的SQL用戶來說似乎非常基礎。但在我看來,將較大的查詢分解爲這些子查詢要容易得多。

如何在同一查詢中查詢usersAndEventCount?

+0

我通常建一個表,然後插入我的INTIAL查詢到它,然後我查詢該表或我需要建立儘可能多的表,查詢他們在一起。 –

+0

@MCP_infiltrator可以查詢查詢中的查詢嗎?而不是做新表? –

+0

@Doug Firr像'select * from(select * from)t'?是的 – Bharadwaj

回答

4

你的聲明「然後要查詢usersAndEventCount」是沒有意義的,因爲usersAndEventCount - 至少在你的第一個例子。你不能「查詢」一列。

但是從你給的例子似乎你想要的東西是這樣的:

Select usersAndEventCount.people, usersAndEventCount.events 
FROM (
    SELECT events.people, 
     COUNT(events.eventType) AS as events 
    FROM theDB.events 
    WHERE event_id = 884 
    GROUP BY people 
) as usersAndEventCount 

這就是所謂的「派生表」,在SQL

+0

因此,在你的例子中,派生表只是括號中的所有內容?是否沒有辦法爲我們創建一個簡寫,就像我們可以使用AS創建一個列一樣? –

+0

@DougFirr:正確 - 派生表是括號之間的部分。並且'as usersAndEventCount'部分爲它命名。關鍵字'AS'用於定義列別名或表別名。如果你想在不同的(不相關的)查詢中重新使用這個select語句,你需要創建一個視圖。 –

+0

因此,我不會發佈一個單獨的「孩子」問題,我可能會問以下問題:如果在我的原始問題的第一個代碼塊中,我刪除了「AS usersAndEventCount」,並將它放在GROUP BY行下,因此它是最後一行 - 這將使它成爲這個查詢中的表嗎?我可以查詢它作爲它自己的表進一步查詢下面嗎? –

3

在純SQL,您可以使用嵌套查詢( AKA子查詢)。只需附上第一個查詢中()括號,所以你的查詢將是這樣的:

Select usersAndEventCount.people, usersAndEventCount.events 
FROM (SELECT events.people, COUNT(events.eventType) AS events 
     FROM theDB.events 
     WHERE event_id = 884 
     GROUP BY people) usersAndEventCount 

此外,要保存第一查詢並在幾個地方重複使用它就像你在訪問做,你可以將其保存爲查看或存儲過程,具體取決於您使用的數據庫系統。如果你想要一個例子,讓我知道你正在使用的數據庫系統。

+0

感謝您的答案Racil。我想我希望它比這更簡單,但是,從來自horse_with_no_name的答案看來,當我在SQL中編寫AS時,它變成了一列。 我不確定我是否應該堅持使用Access的習慣並創建大量表格,或者如果我應該嘗試一次查詢所有內容。後者似乎是SQl的方式? –

+0

@DougFirr這取決於你想達到什麼。完全將它放在上面的一個查詢中,性能略好,但根據數據庫引擎優化,差異可以忽略不計。另一方面,如果您發現自己在不同的主查詢中多次重寫子查詢,則可以通過創建一個View或Stored Procedure來保存您的工作,並在所有這些不同的地方調用它。 –

1

我不確定每100%,因爲目前我無法測試。但我認爲它應該起作用。 uaec是子查詢的別名。這個別名,你可以在主查詢中使用

Select uaec.people, uaec.usersAndEventCount 
FROM (SELECT events.people, COUNT(events.eventType) AS usersAndEventCount 
FROM theDB.events 
WHERE event_id = 884 
GROUP BY people) uaec 
+0

謝謝,但我想我對AS的理解已經拋出了問題。 我試着按照你的例子查詢子查詢,但沒有喜悅。 –