簡體   English   中英

SQL JOIN,當至少一個表包含所需的值時:可以在單個查詢中實現嗎?

[英]SQL JOIN when at least one table contains the desired value: Can this be achieved in a single query?

給定具有以下表的SQL數據庫

  • 表分支

    • branch_Id INT主鍵
  • 表部門

    • dept_Id INT主鍵
    • branch_Id INT
  • 表Branch_Desc

    • branch_Id INT主鍵
    • branch_Desc VARCHAR
  • TABLE Department_Desc

    • department_Id INT主鍵
    • department_Desc VARCHAR

是否可以返回上表中符合以下要求的值列表:

“列出所有分支部門,分支描述和部門描述,其中至少有一個描述(分支或部門)與期望值匹配”?

這里的訣竅是,如果我們有以下場景,那么查詢應該只返回一個匹配的描述:

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'

如果至少有一個部門包含“值”的描述,則返回正確的值;但是當沒有部門包含所需的描述時,則不返回任何行(即使存在與“值”匹配的分支描述)

在這一點上,我認為需要兩個單獨的查詢才能在所有四種可能的情況下獲得正確的結果:

  1. 分支和部門都包含與“值”匹配的描述
  2. 只有分支包含與'值'匹配的描述
  3. 只有部門包含符合'價值'的描述
  4. Branch和Department都不包含與值匹配的描述

如果這是可能的(我感覺一定是這樣),我將不勝感激任何指導方向。

提前致謝!

連接中有兩個錯誤。 下面我修復了那些並在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM