Union

如何在不重寫 N 次的情況下執行幾乎相同的查詢 N 次?

  • May 12, 2014

基本上我有一個數字列表,例如:

1,2,3,4,5

我想對前面的每個數字執行這樣的查詢:

SELECT COUNT(*), field_name
FROM my_table
WHERE field_name = NUMBER

在此範例中,“NUMBER”將是 1、2 … 5。所以我期望一個包含 5 行和 2 列的結果。

現在我正在以這種方式完成任務:

(SELECT ... field_name = 1) UNION (SELECT ... field_name = 2 ) ... (SELECT ... field_name = 5)

在仍然使用單個查詢的同時有沒有其他方法可以做到這一點?特別是我不喜歡隨著我的數字列表的增長,最後一個查詢可能變得很長。

- - -編輯 - - -

如果要執行的查詢類似於:

SELECT *
FROM my_table
WHERE field_name > NUMBER

使用與上面相同的機制,但這次讓我們想像一下,這個查詢將在每次執行時返回超過 1 行。

有沒有辦法創建一個優雅的查詢來完成這項工作,而不是多次使用“UNION”?

你可以使用IN語句

SELECT COUNT(*), field_name
FROM MY_table
WHERE field_name IN (1,2,3,4,5)
GROUP BY field_name

引用自:https://dba.stackexchange.com/questions/64972