[英]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.