ПОДПИСЬ И СУЩЕСТВУЕТ в SQL Server - PullRequest
0 голосов
/ 16 ноября 2018

Я выполняю следующий запрос, и он возвращает все столбцы в наборе результатов как tblFamily, так и 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 '%-%-%');

Теперь я хочу выбрать только / несколько столбцов в наборе результатов из tblFamily и 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;

Любая идея, почему я не могу получить данные из tblConstituent, покавсе данные доступны, когда я запускаю первый запрос?Я получаю эту ошибку:

Сообщение 207, Уровень 16, Состояние 1, Строка 79
Неверное имя столбца 'ListingID'

Надеюсь, мой вопрос понятен.

Спасибо.

PS: определения таблиц ниже:

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

и таблица 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

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы правы, Зеки Гумус.

Но нет необходимости присоединяться к эквивалентам ниже

    AND f.DataProviderID = 23
    AND ISNULL(f.UsesIndexMarker, 0) = 0

"где" существует их

0 голосов
/ 16 ноября 2018

Вы не можете поместить ListingId в список, потому что вы используете tblConstituent с EXISTS вместо JOIN.Пожалуйста, проверьте следующий запрос, я считаю, что это то, что вы хотите:

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

Я только что заметил, что эта часть нам не нужна.Спасибо, Cagdas.

--WHERE DataProviderID = 23
--AND       ISNULL(F.UsesIndexMarker, 0) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...