Reputation: 478
I am running following query and it returns all columns in resultset from both tblFamily
and tblConstituent
.
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. But when I run I can fetch columns from tblFamily
fine but can't fetch any of the columns from 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? I get this error:
Msg 207, Level 16, State 1, Line 79
Invalid column name 'ListingID'
Hope my question is clear.
Thank you.
PS: Table Definitions below:
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
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
Upvotes: 2
Views: 100
Reputation: 1484
you can't put ListingId to list because you use tblConstituent with EXISTS instead of 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
Upvotes: 1
Reputation: 61
You are right Zeki Gumus.
But no need join equalevents below
AND f.DataProviderID = 23
AND ISNULL(f.UsesIndexMarker, 0) = 0
"where" exists them
Upvotes: 3