2012-09-28 38 views
1
select * from ProjectFeature pf 
inner join ProjectArea pa 
on pa.AreaId = pf.AreaId 
inner join Project p 
on p.ProjectId = pa.ProjectId 
where (p.ProjectId=175 AND pf.FeatureStatusTypeId=2 
AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId]))) 

我有另一個查詢加入SQLsingle查詢

select * from ProjectFeature pf 
inner join ProjectArea pa 
on pa.AreaId = pf.AreaId 
inner join Project p 
on p.ProjectId = pa.ProjectId 
where (p.ProjectId=175 AND pf.FeatureStatusTypeId=2 
AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.ChangeRequestToFeatureId) AS [FeatureId]))) 

第二個查詢是完全一樣的,但是功能需要另一場在查詢

的最後我都試過UNION操作但LLBLGEN pro不支持UNION運算符 如何使此int或單個查詢檢索兩個resulsets?

回答

0

如果你要的結果追加爲相同的查詢下,另一行(S),只要它們有完全相同的列和數據類型,那麼你可以使用UNION爲同:

select * from ProjectFeature pf 
inner join ProjectArea pa 
on pa.AreaId = pf.AreaId 
inner join Project p 
on p.ProjectId = pa.ProjectId 
where (p.ProjectId=175 AND pf.FeatureStatusTypeId=2 
AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId]))) 
UNION 
select * from ProjectFeature pf 
inner join ProjectArea pa 
on pa.AreaId = pf.AreaId 
inner join Project p 
on p.ProjectId = pa.ProjectId 
where (p.ProjectId=175 AND pf.FeatureStatusTypeId=2 
AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.ChangeRequestToFeatureId) AS [FeatureId]))) 
+0

是的,我已經試過聯盟,而且LLBLGEN親犯規支持UNION操作 – SupaOden

+0

檢查[這](http://www.llblgen.com/documentation/2.6 /Using%20%%20generated%20code/Linq/gencode_linq_remarkslimitations.htm)以獲取解決方法。是的,LLBLGEN專業人員不支持'UNION'操作員,你沒有說你在使用LLBLGEN專業版的任何地方。 –

0

這是一種奇怪的方式重寫查詢,但你也可以嘗試這樣的事:

select * 
from ProjectFeature pf 
inner join ProjectArea pa 
    on pa.AreaId = pf.AreaId 
inner join Project p 
    on p.ProjectId = pa.ProjectId 
where 
(
    p.ProjectId=175 
    AND pf.FeatureStatusTypeId=2 
    AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) 
    AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) 
) 
OR 
(
    p.ProjectId=175 
    AND pf.FeatureStatusTypeId=2 
    AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) 
    AND (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.ChangeRequestToFeatureId) AS [FeatureId])) 
) 

將兩個WHERE子句相同的查詢與它們之間的OR。同樣在你的第一個查詢中,你似乎在重複最後一行,我不知道爲什麼你需要這樣做。

1
select * from ProjectFeature pf 
inner join ProjectArea pa 
on pa.AreaId = pf.AreaId 
inner join Project p 
on p.ProjectId = pa.ProjectId 
where (p.ProjectId=175 AND pf.FeatureStatusTypeId=2 
AND ((pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.FeatureId) AS [FeatureId])) 
OR (pf.FeatureId IN (SELECT dbo.[MaxFeatureVersoinId](pf.ChangeRequestToFeatureId) AS [FeatureId])))) 

刪除雖冗餘,可以降低要求