YuCheng's Site
    • Posts
    • [DB] Database
      • [SQL] CTE
      • [SQL] Merge
      • [SQL] Ranking
    • [OS] Linux
      • [Arch] 安裝(Virtualbox)
      • [CentOS] 設定網路靜態IP
      • [Ubuntu] SSH 連線
      • [Ubuntu] 設定網路靜態IP
    • [Secure] 安全性議題
      • [授權] OAuth 2.0 簡介
      • [授權] OAuth 2.0 授權許可
    • [Web] Web 相關
      • [Keycloak] docker 安裝
      • [Web] FontForge 造難字
      • [Web] 敏感性 GET 參數
      • [Web] 敏感性 GET 參數
    • [前端] Javascript
      • [JS] Array 常用方法
      • [JS] Object 常用方法
      • [JS] 各種模組(module)
      • [JS] 提升與暫時性死區
      • [JS] 非同步程式設計
      • [JS]原型繼承鏈模型
      • [Code] 格式化民國年
      • [Code] 複製元件內的文字
      • [DIY] 前端路由
      • [DIY] 開發 proxy
    • [前端] Typescript
      • [TS] 擴充標準內建物件
    • [前端] Vue
      • [Router] Navigation Guard 加入查詢參數
      • [TS] TS-Provide
      • [元件] CheckBox
      • [元件] Promise 元件方法
      • [元件] Transparent Wrapper
      • [元件] TypeScript 注意事項
      • [元件] 全域元件
    • [後端] .NET
      • [.NET] .NET 6 Web API 專案
      • [.NET] PDF 列印
      • [.NET] WebView2 單檔部屬
      • [.NET] 製作 Nuget package
      • [.NET] 開發階段專案敏感資料
      • [Snippet] DataTable轉Json
      • [Snippet] JsonElement 操作
      • [部屬手動] Ubuntu Nginx
      • [基礎] 非同步控制器
      • [練習] 認證與授權
        • [驗證與授權] 驗證與授權
        • [驗證與授權] 驗證設定
        • [驗證與授權] 驗證實例
        • [驗證與授權] 授權設定
        • [驗證與授權] 備註頁面
      • [練習] 即時聊天專案
        • [SignalR] 建立專案
        • [SignalR] 後端 Token 授權
        • [SignalR] 前端登入頁面
        • [SignalR] 後端 Token 認證
    • [後端] csharp
      • [Code] 處理民國年
      • [Code] 處理民國年
    • [系統] 軟體設計
      • [架構] 多層(layer)架構
      • [架構] 多層(tier)架構
      • [架構] 無暇的程式碼
      • [程式] 巢狀結構
      • [程設] 鏈式語法比較
    • [維運] Container 容器
      • [Basic] 學習資源
      • [Docker] 基礎指令
      • [Docker] 安裝
      • [K8s] 共享 tnsnames.ora
      • [K8S] 自架 K8S 腳本
    • [維運] DevOps
      • [Git] orphan branch/worktree
      • [Git] Release Action (Dotnet)
      • [Git] Release Action (Vue)
      • [K8S] K8S 安裝
      • [SonarQube] 安裝與.NET 檢測
    • [HIS] FHIR
      • [SMART] Overview
    • [其他] Other
      • [智能家居] Home Assistant
        • [安裝] Home Assistant 安裝
      • [Bot] Telegram Bot
      • [DIY] 一鍵登入台灣杉
      • [Hugo] Toha Theme
      • [OpenWrt] Docker
      • [工具] Gdrive CLI / Linux
      • [工具] openapi generator
      • [工具] Vim Plugin YCM
      • [授權] OAuth2.0
    Hero Image
    [SQL] Ranking

    先建立一個練習表格: CREATE TABLE Department ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL ); CREATE TABLE Employee ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, salary INT, dep_id INT, ); INSERT INTO Employee(name, salary, dep_id) VALUES ('Mandy', 45000, 2); INSERT INTO Employee(name, salary, dep_id) VALUES ('Emily', 43000, 1); INSERT INTO Employee(name, salary, dep_id) VALUES ('Sylvia', 26000, 2); INSERT INTO Employee(name, salary, dep_id) VALUES ('Eva', 48000, 3); INSERT INTO Employee(name, salary, dep_id) VALUES ('Sandra', 33000, 3); INSERT INTO Employee(name, salary, dep_id) VALUES ('Lily', 28000, 2); INSERT INTO Employee(name, salary, dep_id) VALUES ('April', 50000, 1); INSERT INTO Employee(name, salary, dep_id) VALUES ('Cindy', 43000, 1); INSERT INTO Employee(name, salary, dep_id) VALUES ('Kay', 40000, 3); INSERT INTO Department(name) VALUES ('IT'); INSERT INTO Department(name) VALUES ('RD'); INSERT INTO Department(name) VALUES ('QA'); 資料排序 直接用 ORDER BY 無法得到秩(排名)

    June 17, 2022 Read
    Hero Image
    [SQL] MERGE

    一段神奇的語法,可以指定對舊資料、新的資料分別進行不同的動作(通常是更新、新增), 不指定的話預設是 BY TARGET, 動作目標都是 TARGET。 在更新清單的時候特別好用。 MERGE INTO TABLE1 DEST -- 目標表格 USING( SELECT :K1 K1, :K2 K2, :K3 K3, :K4 K4, FROM DUAL) SRC ON( DEST.K1 = SRC.K1 AND DEST.K2 = SRC.K2 AND DEST.K4 = SRC.K4 ) -- TARGET 有,SOURCE 沒有,更新 TARGET 裡面的紀錄 WHEN MATCHED THEN UPDATE SET F1 = SRC.F1, F2 = SRC.F2, -- TARGET 沒有,SOURCE 有,SOURCE 新增到 TARGET WHEN NOT MATCHED THEN INSERT ( K1, K2, K4, K3, F1, F2 ) VALUES ( :K1, :K2, :K4, :K3, :F1, :F2) Reference [StackOverflow] Performing MERGE with Dapper.

    June 14, 2022 Read
    Hero Image
    [SQL] 用 CTE (Common Table Expression) 達成遞迴查詢,建立 MenuTree

    建立一個暫存表 testCTE,並暫存查詢語句(所有資料)的結果 MSSQL CTE 名稱前不需加上 RECURSEIVE 關鍵字,必須使用 UNION ALL PostgreSQL:CTE 名稱前需加上 RECURSIVE 關鍵字,可用 UNION 或 UNION ALL WITH CTE (id, name, parentId, lvl) AS ( -- 取得第一層的資料(Anchor member)(假設沒有 parentId 的是第一層) SELECT id, name parentId, 0 AS lvl FROM menus WHERE parentId IS NULL UNION ALL -- 遞迴取得 Recursive member ( SELECT A.id, A.name, A.parentId, B.lvl + 1 AS lvl FROM menus A INNER JOIN CTE B on A.parentIdi = B.d ) ) SELECT * FROM CTE WHERE id=1 ORDER BY LEVEL Reference [StackOverflow] How to create a query from a menu tree using RECURSIVE CTE?

    April 25, 2022 Read
    Navigation
    • About
    • Skills
    • Experiences
    • Education
    Contact me:
    • [email protected]
    • +886919681059

    Stay up to date with email notification


    By entering your email address, you agree to receive the newsletter of this website.

    Toha Theme Logo Toha
    © 2022 Copyright.
    Powered by Hugo Logo