[英]SQL JOIN when at least one table contains the desired value: Can this be achieved in a single query?
給定具有以下表的SQL數據庫
表分支
表部門
表Branch_Desc
TABLE Department_Desc
是否可以返回上表中符合以下要求的值列表:
“列出所有分支部門,分支描述和部門描述,其中至少有一個描述(分支或部門)與期望值匹配”?
這里的訣竅是,如果我們有以下場景,那么查詢應該只返回一個匹配的描述:
Branch: 1, Desc: test
Branch: 2, Desc: another
Department: 1, Desc: another
Department: 1, Desc: something else
如果期望值為“another”,則查詢應返回:
Branch: 2, Branch Desc: another, Department: 1, Dept Desc: another
分支描述:'test'和Dept Desc'別的'不應該被退回,也不應該是分支1。
假設表結構無法更改,是否可以編寫一個返回正確結果的SQL查詢?
到目前為止,我得到的最近的是:
SELECT br.branch_id, bd.branch_desc, de.dept_id, dd.dept_desc
FROM branch br
LEFT JOIN branch_desc bd
ON bd.branch_id = br.branch_id
AND UPPER(br.branch_desc) = 'value'
JOIN department de
ON br.branch_id = de.branch_id
LEFT JOIN department_desc dd
ON de.dept_id = dd.dept_id
AND UPPER(dd.dept_desc) = 'value'
如果至少有一個部門包含“值”的描述,則返回正確的值;但是當沒有部門包含所需的描述時,則不返回任何行(即使存在與“值”匹配的分支描述)
在這一點上,我認為需要兩個單獨的查詢才能在所有四種可能的情況下獲得正確的結果:
如果這是可能的(我感覺一定是這樣),我將不勝感激任何指導方向。
提前致謝!
連接中有兩個錯誤。 下面我修復了那些並在WHERE子句中使用了OR。
SELECT br.branch_id, bd.branch_desc, de.dept_id, dd.dept_desc
FROM branch br
INNER JOIN branch_desc bd ON db.branch_id = br.branch_id
INNER JOIN department de ON de.branch_id = br.branch_id
--note error in your code above and below
INNER JOIN department_desc dd ON dd.dept_id = de.dept_id
WHERE UPPER(br.branch_desc) = 'value'
OR UPPER(dd.dept_desc) = 'value';
如果您的規范中顯示“匹配此或那個”,請考慮在SQL中UNION
與邏輯OR
類似:
SELECT dept_Id, branch_Id,
Branch_Desc AS branch_or_department_description
FROM Department
NATURAL JOIN
Branch_Desc
UNION
SELECT dept_Id, branch_Id,
department_Desc AS branch_or_department_description
FROM Department
NATURAL JOIN
( SELECT department_Id AS dept_id, department_Desc FROM Department_Desc ) AS d;
要應用搜索條件( branch_or_department_description = '<search text>'
),您可以進行各種選擇,例如創建VIEW
,使用派生表等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.