2015-08-28 16 views
0

Я знаю, что такая проблема может случиться, но я понятия не имею, как ее понять (также, это на португальском языке, поэтому я постараюсь изо всех сил проиллюстрировать мой вопрос на английском языке, переведя структура базы данных, поля и т. д.).SQL Select with Join Bringing Odd Result

Это 4 таблицы, которые мне нужны для этого запроса:
- Agenda_Cliente (это таблица клиентов);
- Agenda_Imposto (это таблица налогов - описание для каждого налогового идентификатора);
- Agenda_ClienteImposto (таблица NxN - связывает каждого Клиента с налогами, которые он платит);
- Agenda_LogAgenda (вот в чем суть запроса: он содержит, какой налог (по идентификатору: CodigoImposto) был отправлен конкретному клиенту (по идентификатору также: CodigoCliente), когда был отправлен налог (DataHoraEnvio) и когда он был достигнут . (DataHoraAcesso)

в strctures являются следующие:

CREATE TABLE [dbo].[Agenda_Cliente](
[CodigoCliente] [bigint] IDENTITY(1,1) NOT NULL, 
[CodigoEscritorio] [int] NOT NULL, 
[RazaoSocial] [varchar](60) NOT NULL, 
[NomeFantasia] [varchar](60) NOT NULL, 
[Email] [varchar](60) NOT NULL, 
[TelefoneComercial] [bigint] NOT NULL, 
[TelefoneCelular1] [bigint] NOT NULL, 
[TelefoneCelular2] [bigint] NOT NULL, 
[CnpjCpf] [bigint] NOT NULL, 
[Cep] [int] NOT NULL, 
[Endereco] [varchar](80) NOT NULL, 
[Bairro] [varchar](60) NOT NULL, 
[Municipio] [varchar](60) NOT NULL, 
[Estado] [char](2) NOT NULL, 
[RegimeTributacao] [int] NOT NULL, 
[FlagAtivo] [bit] NOT NULL, 
PRIMARY KEY CLUSTERED 
(
    [CodigoCliente] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Agenda_Imposto](
[CodigoImposto] [int] IDENTITY(1,1) NOT NULL, 
[DescricaoImposto] [varchar](30) NOT NULL, 
[TipoImposto] [int] NOT NULL, 
[DeptoResponsavel] [int] NOT NULL, 
PRIMARY KEY CLUSTERED 
(
    [CodigoImposto] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Agenda_ClienteImposto](
[CodigoClienteImposto] [bigint] IDENTITY(1,1) NOT NULL, 
[CodigoCliente] [bigint] NOT NULL, 
[CodigoImposto] [int] NOT NULL, 
[DataLimite] [int] NOT NULL, 
PRIMARY KEY CLUSTERED 
(
    [CodigoClienteImposto] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Кроме того, внешние ключи все в порядке и работает

Итак, проблема:. у меня есть следующий SQL SELECT запрос:

SELECT c.CnpjCpf, c.NomeFantasia, i.DescricaoImposto, ci.DataLimite, la.DataHoraEnvio, la.DataHoraAcesso 
FROM Agenda_Cliente c 
JOIN Agenda_ClienteImposto ci ON ci.CodigoCliente = c.CodigoCliente 
JOIN Agenda_Imposto i ON i.CodigoImposto = ci.CodigoImposto 
LEFT JOIN Agenda_LogAgenda la ON la.CodigoImposto = i.CodigoImposto 
WHERE c.CodigoEscritorio = 1 
ORDER BY c.NomeFantasia ASC, ci.DataLimite ASC 

Это принесешь мне это: enter image description here

Но мне нужно, чтобы принести мне это: enter image description here

И если я SELECT * в журнале Calendar (Agenda_LogAgenda), есть только одна запись.

Мне кажется, что это как-то связано с Agenda_ClienteImposto, насколько я пробовал здесь, но это может быть что-то вроде предложения JOIN, которое я не получаю, потому что он применяет результат для «Empresa 1» в «Empresa 3», но «Empresa 3» не существует в Agenda_LogAgenda.

Любая помощь приветствуется. Спасибо!

+0

Сделайте выбор * на столе и посмотрите, есть ли у FK ваулы, которые вы ожидаете. – Leeish

ответ

0

Левое членство в Agenda_LogAgenda находится только на CodingoImposto. Из значений в запросе «CRF», вероятно, существует. Добавьте NomFantasia в предложение ON левого соединения.

+0

Забавно, что я попробовал это, прежде чем снова сюда приехать. Просто чтобы объяснить, если кто-то доберется до этой проблемы так же, как и я, мне нужно было добавить еще один пункт ON в мой ЛЕВЫЙ ПРИСОЕДИНЕНИЕ. Я связал его с codigoCliente, так как оба «codigoCliente» и «codigoImposto» являются ПК в своих собственных таблицах. –