2011-10-20 19 views
2

我們有一張發票表。發票有一個所有者和客戶,都鏈接到資源表的id字段。資源表包含可能在其下有「兒童」業務的企業。我有一個檢查,如果當前的業務是在owner_id或CUSTOMER_ID像這樣的查詢:如何從結果中檢查多個ID在SQL中的一行中的多個ID列?

SELECT * FROM invoices i WHERE @BusinessId IN (i.owner_id, i.customer_id) 

我目前所面對的問題是,我需要驗證,如果企業或其子企業都在owner_id或customer_id。我們有一個返回表從資源表中包含業務ID如果我查詢它像這樣一個功能:

select business_id from dbo.vfn_child_business(@BusinessId , 'Y') 

的「Y」參數基本上與子業務一併返回主父ID在結果(基本上尋找一個企業的兒童業務,幷包括自己)。

我無法弄清楚如何查詢說

SELECT * from Invoices 
where ANY OF MY RESULTS FROM CHILD BUSINESS FUNCTION IN (i.owner_id, i.customer_id). 

我已經試過:

... WHERE (select business_id 
      from dbo.vfn_child_business(@BusinessId , 'Y')) 
    IN (i.owner_id, i.customer_id) 

但我得到這個錯誤:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

請任何人都幫幫我?

回答

1

我沒有測試過這一點,但EXISTS謂詞可能有助於在這裏:​​

WITH children AS 
    (SELECT business_id 
    FROM dbo.vfn_child_business(@BusinessId , 'Y')) 
SELECT 
    i.* 
FROM 
    Invoices AS i 
WHERE 
    EXISTS 
     (SELECT 1 
     FROM children 
     WHERE children.business_id IN (i.owner_id, i.customer_id)) 
0

您是否嘗試過將該功能加入表格?

SELECT 
    invoices.* 
FROM 
    invoices 
INNER JOIN 
    dbo.vfn_child_business(@BusinessId , 'Y') AS child_business 
    ON invoices.owner_id = child_business.business_id 
    OR invoices.customer_id = child_business.business_id 

如果這可能導致重複,請使用DISTINCT或GROUP BY。

+0

還沒有,但我已經簡化我查詢了很多東西。這是跨越大約15個表的400行查詢的一小部分。 :)我現在要離開一天,但我會試着看看我是否可以在明天加入。我最初的想法是,我不能。 – lloydphillips

+0

表值函數當然可以加入,所以這當然是可能的。如果證明是一個問題,請在此留言,我會看看。 – MatBailie