我想創建一個與MySQL和PostgreSQL一起工作的通用查詢。MySQL和PGSQL的通用查詢
對於此查詢,我需要選擇3個表中的所有列,但結果需要在ID上具有不同的子句以消除重複的行。 實際上在數據庫中,有6條記錄,但只有3條是不同的: 其中一條出現3次,另一條出現2,最後一條出現。 多次出現的記錄完全一樣,我只想保留其中的一個。
這裏是MySQL查詢:
SELECT
*
FROM
table_1
INNER JOIN table_2
ON table_1.id = table_2.table_1_id
INNER JOIN table_3
ON table_2.table_3_id = table_3.id
WHERE
table_3.type = 'foo'
GROUP BY
table_1.id
這是PostgreSQL查詢:
SELECT DISTINCT ON (table_1.id)
*
FROM
table_1
INNER JOIN table_2
ON table_1.id = table_2.table_1.id
INNER JOIN table_3
ON table_2.table_3_id = table_3.id
WHERE
table_3.type = 'foo'
我沒有找到如何創建一個與MySQL和PostgreSQL一起工作的查詢
爲什麼*?當table_2中有多個匹配記錄可用於table_1中的值時,您需要哪些值?對「GROUP BY」使用ANSI「GROUP BY」和ANSI規則:對「SELECT」中列出的每一列,在「GROUP BY」中進行聚合或列表。 **你想要解決什麼問題?** – Pred
Brut-force解決方案:'select * from(select table_1。*,(select_table from table_2 where table_1.id = table_2.table_1.id order by限制1)as t2_id,... from table_1)t內連接table_2 on(t.t2_id = table_2.id)...'但是不要試圖寫「通用」解決方案,因爲你失去了大部分優點每個DBMS。改爲創建存儲函數,並以大多數與DBMS相關的有效方式對每個函數進行編碼。 –
Abelisto