我有一個單串列的輸出,其值類似于
| 輸出 |
|---|
| 一個 |
| B. |
我有一個表,其中包含一個 ID 和值
| ID | 資料 |
|---|---|
| 1 | 一個 |
| 1 | 乙 |
| 1 | C |
| 2 | 一個 |
| 2 | 乙 |
| 3 | 乙 |
| 3 | C |
| 3 | D |
我無法構建一個 oracle 查詢,將第一個表的輸出與第二個表的資料列進行比較,如果我要按 id 對它們進行分組,請告訴我哪個 id 與完全相同的資料匹配。
所以對于這種情況,只有 ID 2 應該回傳,因為它完全匹配,但 ID 1 不會回傳,因為它有一個額外的值
uj5u.com熱心網友回復:
將 TableA 左連接到 TableB。
那么 100% 匹配將沒有不匹配的 OUTPUT。
并且匹配的將與 TableA 中的計數相同。
SELECT b.ID
FROM TableB b
LEFT JOIN TableA a ON a.OUTPUT = b.Data
GROUP BY b.ID
HAVING COUNT(CASE WHEN a.OUTPUT IS NULL THEN 1 END) = 0
AND COUNT(DISTINCT a.OUTPUT) = (SELECT COUNT(*) FROM TableA)
ORDER BY b.ID;
| ID |
|---|
| 2 |
關于db<>fiddle的演示在這里
uj5u.com熱心網友回復:
- with 子句中的第一個選擇是表的連接。
- 第二個選擇使用第一個選擇并找到其“資料”列從表 A 的輸出列中獲取所有值的 id。
- 第三個選擇僅包含表 A 中沒有“資料”的 id。
- 結果僅包含具有所有輸出且沒有額外的 id。
- 兩個表中的唯一值是先決條件。
- 甲骨文 11RG2。
DDL:
CREATE TABLE TableA
("OUTPUT" varchar2(1))
;
INSERT ALL
INTO TableA ("OUTPUT")
VALUES ('A')
INTO TableA ("OUTPUT")
VALUES ('B')
SELECT * FROM dual
;
CREATE TABLE TableB
("ID" int, "Data" varchar2(1))
;
INSERT ALL
INTO TableB ("ID", "Data")
VALUES (1, 'A')
INTO TableB ("ID", "Data")
VALUES (1, 'B')
INTO TableB ("ID", "Data")
VALUES (1, 'C')
INTO TableB ("ID", "Data")
VALUES (2, 'A')
INTO TableB ("ID", "Data")
VALUES (2, 'B')
INTO TableB ("ID", "Data")
VALUES (3, 'B')
INTO TableB ("ID", "Data")
VALUES (3, 'C')
INTO TableB ("ID", "Data")
VALUES (3, 'D')
SELECT * FROM dual
;
SQL:
with a (id, "Data", output) as (
select
id, "Data", output
from
tableb left join tablea on "Data"=output
)
select
id
from
a
where
output is not null
group by id
having count("Data") = (select count(output) from tablea)
minus
select id from a where output is null
;
輸出:
| ID |
|---|
| 2 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414335.html
標籤:
上一篇:SQL|如果行不存在,如何在沒有開關情況下顯示“NA”
下一篇:Oracle會自動洗掉臨時表嗎?
