我想運行兩個非常相似的查詢,以便查詢回傳一個包含兩列的表(每個查詢運行一列)
查詢 #1:
SELECT groupID
FROM tbl
WHERE username = 'admin' AND permission LIKE 'sample.%'
查詢 #2:
SELECT groupID
FROM tbl
WHERE username = 'administrator' AND permission LIKE 'sample.%'
期望回報:
| 行政 | 行政人員 |
|---|---|
| 組ID.1 | 組ID.1 |
| 組ID.3 | 組ID.2 |
可能嗎?我能夠通過執行 FULL OUTER JOIN 獲得預期的回報,但我讀到 JOINS 位于兩個表之間,而這只查看一個表。
uj5u.com熱心網友回復:
您可以嘗試先為每個表的每一行分配一個行號,然后在此排名上匹配兩個表:
WITH cte_admin AS (
SELECT groupID, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rn
FROM tbl1
),
cte_administrator AS (
SELECT groupID, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rn
FROM tbl2
)
SELECT t1.groupID AS g1,
t2.groupID AS g2
FROM cte_admin t1
INNER JOIN cte_administrator t2
ON t1.rn = t2.rn
UNION
SELECT t1.groupID AS g1,
t2.groupID AS g2
FROM cte_admin t1
LEFT JOIN cte_administrator t2
ON t1.rn = t2.rn
WHERE t2.rn IS NULL
UNION
SELECT t1.groupID AS g1,
t2.groupID AS g2
FROM cte_administrator t1
LEFT JOIN cte_admin t2
ON t1.rn = t2.rn
WHERE t2.rn IS NULL
如果您可以共享表格中的內容,將提供經過全面測驗的解決方案tbl。
對于完全外連接,需要三個連接:
INNER JOIN匹配兩個表之間對應的行號LEFT JOIN from table1 to table2 WHERE table2 is null匹配 table1 中多余的行,以防它的行數多于 table2LEFT JOIN from table2 to table1 WHERE table1 is null匹配表 2 中多余的行,以防它的行多于表 1
一個偽測驗在這里完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486995.html
上一篇:查找非連續日期范圍
