SQL Select 与 Join 带来奇怪的结果
SQL Select with Join Bringing Odd Result
我知道这种问题可能会发生,但我不知道如何解决(另外,它是葡萄牙语,所以我会尽力用英语说明我的问题,翻译数据库结构,字段,等)。
这些是我需要用于此查询的 4 个 table:
- Agenda_Cliente(这是客户端table);
- Agenda_Imposto(这是税收 table - 每个税号的描述);
- Agenda_ClienteImposto(NxN table - 将每个客户与其支付的税款联系起来);
- Agenda_LogAgenda(这是查询的核心:它包含发送给特定客户的税(按 ID:CodigoImposto)(按 ID:CodigoCliente),何时发送税(DataHoraEnvio)以及何时发送已访问 (DataHoraAcesso)。
结构如下:
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
它给我带来了这个:
但我需要它给我带来这个:
如果我 SELECT * 在日历日志 (Agenda_LogAgenda) 中,只有一条记录。
在我看来,它与 Agenda_ClienteImposto 有关,据我在这里尝试,但它可能与我没有得到的 JOIN 子句有关,因为它正在应用结果对于 "Empresa 3" 中的 "Empresa 1",但 Agenda_LogAgenda 中不存在 "Empresa 3"。
感谢任何帮助。
谢谢!
Agenda_LogAgenda 的左连接仅在 CodingoImposto 上。根据查询中的值,'CRF' 可能确实存在。将 NomFantasia 添加到左连接的 ON 子句中。
我知道这种问题可能会发生,但我不知道如何解决(另外,它是葡萄牙语,所以我会尽力用英语说明我的问题,翻译数据库结构,字段,等)。
这些是我需要用于此查询的 4 个 table:
- Agenda_Cliente(这是客户端table);
- Agenda_Imposto(这是税收 table - 每个税号的描述);
- Agenda_ClienteImposto(NxN table - 将每个客户与其支付的税款联系起来);
- Agenda_LogAgenda(这是查询的核心:它包含发送给特定客户的税(按 ID:CodigoImposto)(按 ID:CodigoCliente),何时发送税(DataHoraEnvio)以及何时发送已访问 (DataHoraAcesso)。
结构如下:
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
它给我带来了这个:
但我需要它给我带来这个:
如果我 SELECT * 在日历日志 (Agenda_LogAgenda) 中,只有一条记录。
在我看来,它与 Agenda_ClienteImposto 有关,据我在这里尝试,但它可能与我没有得到的 JOIN 子句有关,因为它正在应用结果对于 "Empresa 3" 中的 "Empresa 1",但 Agenda_LogAgenda 中不存在 "Empresa 3"。
感谢任何帮助。 谢谢!
Agenda_LogAgenda 的左连接仅在 CodingoImposto 上。根据查询中的值,'CRF' 可能确实存在。将 NomFantasia 添加到左连接的 ON 子句中。