2012-06-29 48 views
-1

我与此查询,但没有运气尝试:IN查询选择的所有记录

SELECT tr.transferfrom, tr.transferto, br.id as 'BR_ID', 
    tr.refno, br.name as 'BR_NAME', br.code as 'BRANCH_CODE', 
    tr.docno, tr.transdate, stk.stockno,stk.salescat,tr.qty, 
    tr.sprice,tr.qty*tr.sprice as 'GROSS_SALES' 
FROM TRANSFER tr 
JOIN branch br on tr.branchid=br.id 
JOIN stocks stk on tr.stockid=stk.id 
WHERE (tr.docno = 'ST00576' AND br.id IN ('*')) 
OR RIGHT(tr.refno,7) = 'ST00576' AND LEFT(tr.refno,3) IN ('*') 

我想有查询选择的所有记录,如果br.id是空值。

+0

在模式中,名为'id'的列是否真的是空白的? –

回答

1

有一个子查询得到所有的分支ID,然后在IN查询可以参考子查询的输出..子查询会像select br.id from branch br

因此,整个查询将看起来像:

SELECT 
    tr.transferfrom, 
    tr.transferto, 
    br.id as 'BR_ID', 
    tr.refno, 
    br.name as 'BR_NAME', 
    br.code as 'BRANCH_CODE', 
    tr.docno, 
    tr.transdate, 
    stk.stockno, 
    stk.salescat, 
    tr.qty, 
    tr.sprice, 
    tr.qty*tr.sprice as 'GROSS_SALES' 
FROM TRANSFER tr 
    JOIN branch br 
    on tr.branchid=br.id 
    JOIN stocks stk 
    on tr.stockid=stk.id 
WHERE (
    tr.docno = 'ST00576' 
    AND br.id IN (select br.id from branch br) 
) 
    OR RIGHT(tr.refno,7) = 'ST00576' 
    AND LEFT(tr.refno,3) IN (select br.id from branch br) 
+0

忘了提及'*'是逗号分隔值,可能是空白..它是一个用户输入从复选框,我把它们连接成逗号分隔..但有时用户可以将它留空以包括所有分支.. – redcoder