[英]SUBQUERY and EXISTS in SQL Server
I am running following query and it returns all columns in resultset from both tblFamily
and tblConstituent
. 我正在运行以下查询,它从
tblFamily
和tblConstituent
返回结果tblFamily
所有列。
SELECT
*
FROM
tblFamily AS f
WHERE
DataProviderID = 23
AND ISNULL(UsesIndexMarker, 0) = 0
AND EXISTS (SELECT 1
FROM tblConstituent
WHERE FamilyID = f.FamilyID
AND StartDate < GETDATE()
AND EndDate > GETDATE()
AND FilterValue LIKE '%-%-%');
Now, I want only selected/few columns in the resultset from tblFamily
and tblConstituent
as below. 现在,我只希望从
tblFamily
和tblConstituent
的结果tblFamily
选择/很少列,如下所示。 But when I run I can fetch columns from tblFamily
fine but can't fetch any of the columns from tblConstituent
. 但是,当我跑我可以获取从列
tblFamily
罚款,但不能从获取任何列tblConstituent
。
SELECT
td.FamilyID,
td.Name,
td.DataProviderID,
td.UsesIndexMarker,
td.OpenDate,
td.ListingID
FROM
(SELECT *
FROM tblFamily AS f
WHERE DataProviderID = 23
AND ISNULL(UsesIndexMarker, 0) = 0
AND EXISTS (SELECT 1
FROM tblConstituent AS tc
WHERE tc.FamilyID = f.FamilyID
AND tc.StartDate < GETDATE()
AND tc.EndDate > GETDATE()
AND tc.FilterValue LIKE '%-%-%'
AND f.DataProviderID = 23
AND ISNULL(f.UsesIndexMarker, 0) = 0)) AS td;
Any idea why I can't fetch data from tblConstituent
while all data is available when I run first query? 知道为什么在我运行第一个查询时所有数据都可用时为什么无法从
tblConstituent
获取数据吗? I get this error: 我收到此错误:
Msg 207, Level 16, State 1, Line 79
消息207,第16级,州1,第79行
Invalid column name 'ListingID'无效的列名“ ListingID”
Hope my question is clear. 希望我的问题清楚。
Thank you. 谢谢。
PS: Table Definitions below: PS:下表定义:
tblFamily tblFamily
FamilyID int
RefFamilyID int
FamilyTypeID int
Name varchar
DataProviderID int
CalendarID int
TrustedPrices tinyint
FXRateSetID int
CurrentDate date
LastRevision bigint
HasClose tinyint
HasOpen tinyint
HasTPlus tinyint
OffsetFromMaxAsAtDate tinyint
PriceSetID int
DividendSetID int
CorporateActionSetID int
IncludeFilterInNaturalKey tinyint
MatchAllCodes tinyint
CodeReferenceFamilyID int
LatestTaskRunID int
TrustedFXRates tinyint
HasDividends tinyint
HasPrices tinyint
HasRebalance tinyint
HasReferenceData tinyint
HasIntradayChanges tinyint
TplusDataIsDelta tinyint
ValidateAfterPersisting tinyint
LastUpdate datetime
FundProviderID int
TimeDataExpires time
ExcludeZeroNumberOfUnits bit
PrefilterConstituents bit
LimitEndDate bit
IgnoreForPricing bit
ExcludedAssetSetID int
NextRebalanceDate date
TaxRateSetID int
OpenDataIsDelta bit
RebalanceDataIsDelta bit
OpenDate date
AutoAddMissingListing bit
EnforcedSecurityTypeID int
TplusDataIsCummulative bit
CalculationSetID int
ValidationSetID int
UsesIndexMarker bit
MappingReferenceFamilyID int
DataExtractionSetID int
MappingReferenceSecurityID int
AutoAddOddLots bit
DefaultFilterValue varchar
SecurityClassID int
CountryClassificationID int
DataStatusMask int
RebalanceFrequency varchar
RebalanceNotes varchar
NextRebalanceDataAvailable date
CheckFileDates bit
IsPayDateUseForReinvestment int
ValidationThresholdSetID int
Created datetime
and table tblConstituent 和表tblConstituent
ConstituentID bigint
FamilyID int
ListingID int
StartDate date
EndDate date
FilterValue varchar
ConstituentType tinyint
NumberOfUnits decimal
PriceAdjustmentFactor decimal
Factor1 decimal
Factor2 decimal
Factor3 decimal
Factor4 decimal
Factor5 decimal
Factor6 decimal
Factor7 decimal
Factor8 decimal
Factor9 decimal
IsGettingArchived tinyint
You are right Zeki Gumus. 您是正确的Zeki Gumus。
But no need join equalevents below 但不需要在下面加入等号事件
AND f.DataProviderID = 23
AND ISNULL(f.UsesIndexMarker, 0) = 0
"where" exists them 它们“在哪里”存在
you can't put ListingId to list because you use tblConstituent with EXISTS instead of JOIN. 您不能将ListingId列出,因为您将tblConstituent与EXISTS一起使用,而不是JOIN。 Please check the following query, I believe this is what you want :
请检查以下查询,我相信这是您想要的:
SELECT F.FamilyID,
F.Name,
F.DataProviderID,
F.UsesIndexMarker,
F.OpenDate,
TC.ListingID
FROM tblFamily AS f
INNER JOIN tblConstituent AS tc
ON tc.FamilyID = f.FamilyID
AND tc.StartDate < GETDATE()
AND tc.EndDate > GETDATE()
AND tc.FilterValue LIKE '%-%-%'
AND f.DataProviderID = 23
AND ISNULL(f.UsesIndexMarker, 0) = 0
I just noticed we don't need this part. 我只是注意到我们不需要这部分。 Thanks Cagdas.
谢谢卡格达斯。
--WHERE DataProviderID = 23
--AND ISNULL(F.UsesIndexMarker, 0) = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.