2016-02-25 4 views
0

У меня возникла проблема с тем, чтобы этот скрипт SQL соединял две таблицы вместе, я могу выполнить его, и он покажет результаты первой части (AccountID, AuditDate ..etc), но это не будет присоединитесь к оператору внутреннего выбора.SQL Script не присоединяется к результатам

Я проверил путем проверки, что есть данные, которые соответствуют базе данных.

Какую часть я испортил?

Select AccountID, AuditDate, SourceVersion 
From Audit 
Left join (
    Select A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal,a.PageCountColor, A.PageCountMono 
    from InvalidPrinterAudit A 
    where A.DeviceID = 90757 
) InvalidPrinterAudit on InvalidPrinterAudit.AuditID = Audit.AuditID 
+0

Попробуйте это, Выберите Audit.AccountID, Audit.AuditDate, Audit.SourceVersion, A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal, A.PageCountColor, A.PageCountMono от аудита, как аудит LEFT JOIN InvalidPrinterAudit как A on (A.InvalidPrinterAudit = Audit.AuditID), где A.DeviceID = 90757 – Ram

+0

Возвращает ли внутренний запрос что-либо? Не имеет значения. –

+0

Да Внутренний выбор вернет данные, Спасибо RAM !!! вы получили его на работу, мне пришлось изменить имя столбца, но он теперь работает – Brett

ответ

2

Там есть несколько вещей, что здесь происходит.

One: Для того, чтобы иметь поля результирующего набора, они должны быть включены в SELECT часть запроса:

Select AccountID, AuditDate, SourceVersion, InvalidPrinterAudit.PrinterAuditID, InvalidPrinterAudit.AuditID, InvalidPrinterAudit.SerialNr, InvalidPrinterAudit.PageCountTotal,InvalidPrinterAudit.PageCountColor, InvalidPrinterAudit.PageCountMono 
    From Audit 
    Left join (
     Select A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal,a.PageCountColor, A.PageCountMono 
     from InvalidPrinterAudit A 
     where A.DeviceID = 90757 
    ) InvalidPrinterAudit on InvalidPrinterAudit.AuditID = Audit.AuditID 

Два: Вам не нужно иметь подзапрос Вот. Подзапросы великолепны, если вам нужно агрегировать результаты из отдельной таблицы или чего-то еще, но здесь вы можете просто пойти с LEFT OUTER JOIN и покончить с этим.

Select AccountID, AuditDate, SourceVersion, InvalidPrinterAudit.PrinterAuditID, InvalidPrinterAudit.AuditID, InvalidPrinterAudit.SerialNr, InvalidPrinterAudit.PageCountTotal,InvalidPrinterAudit.PageCountColor, InvalidPrinterAudit.PageCountMono 
    From Audit 
    Left OUTER JOIN InvalidPrinterAudit 
     ON InvalidPrinterAudit.AuditID = Audit.AuditID 
      AND InvalidPrinterAudit.DeviceID = 90757 

Это будет применять этот DeviceID = 90757 фильтр к вашему InvalidPrinterAudit до присоединиться применяется, так что вы все равно получите все ваши Audit записей, а затем только InvalidPrinterAudit записи для этого DeviceID, который соответствует.

0

Вы выбираете меньше столбцов во внешнем запросе, чем во внутреннем запросе.

Если вы хотите, чтобы они были возвращены в результирующем, включите их во внешнем:

Select AccountID, AuditDate, SourceVersion, PrinterAuditID, SerialNr 
From Audit 
Left join (
    Select A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal,a.PageCountColor, A.PageCountMono 
    from InvalidPrinterAudit A 
    where A.DeviceID = 90757 
) InvalidPrinterAudit on InvalidPrinterAudit.AuditID = Audit.AuditID 
+0

Это не сделайте трюк, What Ram, размещенное выше в комментариях, обработанных – Brett

+0

Теперь вы упомянули об этом, возникает вопрос, почему осталось присоединиться к подбору. –

Смежные вопросы