簡體   English   中英

SQL 將一個查詢的結果用於另一個查詢

[英]SQL Use Result from one Query for another Query

這是一張表的摘錄:

| id | type    | other_id | def_id | ref_def_id|
| 1  | int     | NULL     |  5     | NULL     |
| 2  | string  | NULL     |  5     | NULL     |
| 3  | int     | NULL     |  5     | NULL     |
| 20 | ref     | 3        |  NULL  | 5        |
| 21 | ref     | 4        |  NULL  | 5        | 
| 22 | ref     | 5        |  NULL  | 5        |  

我想要的是找到類型為 ref 的條目。 然后我會在我的結果中包含這個條目:

| 22 | ref     | 5        |  NULL  | 5        |  

我面臨的問題是,我現在想將此條目與 def_id = 5 的同一表的其他條目結合起來。

所以我會得到這個特定引用類型的 def_id = 5 的所有條目作為結果。 我不知何故需要我的第一個查詢的輸出,檢查 ref_def_id 是什么,然后對該 id 進行另一個查詢。

我真的很難理解如何繼續。 任何輸入都非常感謝。

如果我理解正確的話,你需要找到一個行type “裁判”,然后使用自己的價值觀ref_def_id列在相同的值來獲得行def_id 在這種情況下,您需要使用子查詢來獲取具有 'ref' 類型的行,並使用INEXISTS將其組合:

select *
from YourTable
where def_id in (select ref_def_id from YourTable where type='ref');

select *
from YourTable
where exists (select * from YourTable yt
  where yt.ref_def_id=YourTable.def_id and yt.type='ref')

這兩個查詢是等價的, IN乍一看更容易理解,但EXISTS允許更復雜的條件(例如,您可以使用多個列與子查詢組合)。

編輯:因為您評論說您還需要來自'ref'行的id ,那么您需要使用子查詢:

select source_id, YourTable.*
from YourTable
join (select id as source_id, ref_def_id
      from YourTable
      where type='ref')
as refs on refs.ref_def_id=YourTable.def_id
order by source_id, id;

對於每個 'ref' 行,您將獲得具有關聯ref_id所有行。

您正在尋找的是子查詢,甚至更好的連接操作。

看看這里: http : //www.mysqltutorial.org/mysql-left-join.aspx

聯接/左聯接允許您根據給定條件在一個查詢中組合表行。 出於您的目的,條件可能是 id = 5。

你似乎想要聚合:

select max(id) as id, type, max(other_id) as other_id,
       max(def_id) as def_id, ref_def_id
from t
where type = 'ref'
group by type, ref_def_id

使用下面的查詢從子查詢中獲取列。

select a.ref_def_id
from (select ref_def_id from YourTable where type='ref') as a;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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