我想從我們的資料存盤中隨機抽取 30K 行來創建一個資料集,然后再創建 30K 行用于第二個資料集,該資料集與第一個不重疊任何 id。
我的想法是如何在繪制第二個子查詢時以某種方式參考在第一個子查詢中提取的 id 列,然后回傳它們的聯合:
SELECT * FROM (
SELECT id_col, A, B, C, 'group1' as label
FROM my_db
LIMIT 30000
) as t1
UNION ALL
(
SELECT id_col, A, B, C, 'group2' as label
FROM my_db
WHERE id_col NOT IN t1.id_col
LIMIT 30000
) as t2
但這不起作用,因為我得到 "syntax error at or near t1" 。
更新:將標簽添加到列以顯示聯合如何為兩個組創建高格式。
uj5u.com熱心網友回復:
正如克林在評論中指出的那樣,您需要使用公用表運算式 (CTE) 才能獲得所需的結果:
WITH t1 AS (
SELECT id_col, A, B, C, 'group1' AS label
FROM my_db
LIMIT 30000
), t2 AS (
SELECT id_col, A, B, C, 'group2' AS label
FROM my_db
WHERE id_col NOT IN (SELECT id_col FROM t1)
LIMIT 30000
)
SELECT id_col, A, B, C, label
FROM t1
UNION
SELECT id_col, A, B, C, label
FROM t2
你也不需要做一個 UNION ALL,一個 UNION 就足夠了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483039.html
標籤:sql PostgreSQL
上一篇:為什么HikariCP說“目標類org.postgresql.ds.PGSimpleDataSource上不存在屬性資料庫”?
