2013-09-29 41 views
1

我必須進入一個表來檢索一個參數,然後返回到相同的表中檢索基於參數的數據。SQL查詢可以結合嗎?

<cfquery name = "selnm" datasource = "Moxart"> 
select SelName from AuxXref 
where Fieldname = <cfqueryparam value = "#orig#"> 
</cfquery> 

<cfset selname = selnm.SelName> 

<cfquery name = "fld" datasource = "Moxart"> 
select Fieldname, DBname from AuxXref 
where SelName = <cfqueryparam value = "#selname#"> 
</cfquery> 

這可以在單個查詢中完成嗎?

+3

這兩個查詢都從同一個表中選擇數據。爲什麼不能直接選擇fieldname/DBname,其中fieldname和selname都等於#orig#? – BKK

+1

與您的問題無關,但您應該指定一個cfsqltype,以充分利用cfqueryparam。否則,它默認爲'cf_sql_char',這並不總是可取的。 – Leigh

+0

@BKK SelName永遠不會=#orig#。請看下面我對Scott的回答。 –

回答

2

您可以在一個查詢做到這一點,像這樣:

<cfquery name = "fld" datasource = "Moxart"> 
    select Fieldname, DBname, SelName from AuxXref 
    where SelName = <cfqueryparam value = "#orig#"> 
    AND FieldName = <cfqueryparam value = "#orig#"> 
</cfquery> 
+0

對於一個SelName,有許多字段名,其中許多字段名不會等於#orig#。我必須爲這個特定的Fieldname找到SelName,然後找到所有具有相同SelName的其他Fieldnames。 –

+0

這聽起來像你期望的邏輯是從你的原始問題不同。您的評論讓我覺得您正在嘗試執行OR操作 –

4

像這樣的東西可能會滿足您的要求。

select fieldname, DBname 
from AuxXref 
where selname in 
(select distinct selname 
from auxXref 
where fieldname = <cfqueryparam value = "#orig#"> 
) 
and fieldname <> <cfqueryparam value = "#orig#"> 

如果子查詢返回多行,而且只有一行,那麼您必須指定您想要的。

+0

DISTINCT和最後一行可能是多餘的,但否則這與我正在閱讀OP的內容相符。 –

+0

@PeterBoughton是的,這是我的目標。我不知道如何形成子查詢。獨特讓我有點緊張,因爲只涉及一個名稱,但是衆多的字段名稱,我不確定在這種情況下有多獨特的作品。子查詢可能會返回多個行,如果有多個匹配該名稱的Fieldname,那就是我想要的。 –

+0

對於它的價值,我添加了distinct關鍵字,因爲我相信這會使查詢運行得更快。 –