簡體   English   中英

需要在嵌套子查詢中使用查詢列值

[英]Need to use query column value in nested subquery

編輯
對不起,半篇文章:(

看來我不能在子查詢中使用父查詢中的列。 如何重構該查詢以獲取所需信息?

dbo.func_getRelatedAcnts返回相關帳戶的表(來自給定帳戶的所有子帳戶)。 它會轉到給定帳戶的頂級父帳戶,然后從那里選擇所有子帳戶。 這為我提供了所有父級,同級和子級帳戶ID的表格。

事件具有帳戶的外鍵,個人檔案具有帳戶的外鍵。

注冊具有外部配置文件密鑰和事件密鑰。 每個配置文件可以有多個注冊表。 我需要查找與帳戶中的配置文件相關聯的所有reg,這些帳戶與注冊所處的事件沒有任何層次關系。

問題是我想使用與父查詢中reg相關的配置文件的配置文件帳戶密鑰來動態獲取子查詢中的表。

SELECT COUNT(r.reg_id)  
FROM registrations r 
JOIN profiles p ON (r.reg_frn_pro_id = p.pro_id)  
JOIN events e ON (r.reg_frn_evt_id = e.evt_id)  
WHERE evt_frn_acnt_id NOT IN 
      (SELECT * FROM dbo.func_getRelatedAcnts(p.pro_frn_acnt_id))  

我的錯誤:
pro_frn_acnt_id不是公認的表提示選項。 如果要將其用作表值函數的參數,請確保將數據庫兼容模式設置為90。

不能完全確定為什么要使用兩組括號,也不能確定要匹配的括號,但是以下兩種方法之一應該可以工作,如果不能,那么它將為您提供需要完成操作的一般思路。

1)

SELECT COUNT(r.reg_id)
FROM registrations r JOIN profiles p ON (r.reg_frn_pro_id = p.pro_id)  
JOIN events e ON (r.reg_frn_evt_id = e.evt_id)  
WHERE evt_frn_acnt_id NOT IN 
    ( SELECT pro_frn_acnt_id FROM dbo.func_getRelatedAcnts )

2)

SELECT COUNT(r.reg_id)
FROM registrations r JOIN profiles p ON (r.reg_frn_pro_id = p.pro_id)  
JOIN events e ON (r.reg_frn_evt_id = e.evt_id)  
WHERE evt_frn_acnt_id NOT IN 
    ( SELECT evt_frn_acnt_id FROM dbo.func_getRelatedAcnts )

這對我有用:

CREATE FUNCTION fn_tvf(@input INT)
RETURNS TABLE
AS
        RETURN
        (
        SELECT  @input AS id
        UNION ALL
        SELECT  @input + 1
        )

GO

;WITH    q AS
        (
        SELECT  1 AS id
        ),
        t AS
        (
        SELECT  3 AS id
        )
SELECT  *
FROM    q
CROSS JOIN
        t
WHERE   t.id NOT IN (SELECT  * FROM fn_tvf(q.id))

您得到的確切錯誤消息是什么?

好。 我創建了一個附加函數,它需要兩個參數,一個用於創建相關acnt_ids的表,另一個用於在結果表中查找。 有了這個新功能,我可以像這樣重新編寫查詢

SELECT COUNT(r.reg_id)
FROM registrations r 
JOIN profiles p ON (r.reg_frn_pro_id = p.pro_id)  
JOIN events e ON (r.reg_frn_evt_id = e.evt_id)  
WHERE dbo.func_checkAcntRelation(p.pro_frn_acnt_id, e.evt_frn_acnt_id) = 0

暫無
暫無

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

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