可以在同一数据表上显示ID为空和ID为非空的数据的SQL查询?

可以在同一数据表上显示ID为空和ID为非空的数据的SQL查询?,sql,select,join,null,Sql,Select,Join,Null,你好,我有个问题 我先给你看看我的桌子 [Vendedores]( [IdVendedor] [int] IDENTITY(1,1) NOT NULL, [IdGrupo] [int] NULL, [IdInfoContacto] [int] NULL, [ApellidoPaterno] [varchar](30) NULL, [ApellidoMaterno] [varchar](30) NULL, [Nombre] [varchar](35)

你好,我有个问题

我先给你看看我的桌子

[Vendedores](
    [IdVendedor] [int] IDENTITY(1,1) NOT NULL,
    [IdGrupo] [int] NULL,
    [IdInfoContacto] [int] NULL,
    [ApellidoPaterno] [varchar](30) NULL,
    [ApellidoMaterno] [varchar](30) NULL,
    [Nombre] [varchar](35) NULL,
    [Estado] [varchar](10) NULL,
 CONSTRAINT [PK_Vendedores] PRIMARY KEY CLUSTERED 

[Clientes](
    [IdCliente] [int] IDENTITY(1,1) NOT NULL,
    [IdGrupo] [int] NULL,
    [IdVendedor] [int] NULL,
    [IdDireccion] [int] NULL,
    [IdInfoContacto] [int] NULL,
    [FechaAlta] [date] NULL,
    [ApellidoPaterno] [varchar](30) NULL,
    [ApellidoMaterno] [varchar](30) NULL,
    [Nombre] [varchar](40) NULL,
    [Empresa] [text] NULL,
    [Estado] [varchar](20) NULL,
    [Estatus] [varchar](20) NULL,
 CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED 

[dbo].[Mensajes](
    [IdMensaje] [int] IDENTITY(1,1) NOT NULL,
    [IdCliente] [int] NULL,
    [IdVendedor] [int] NULL,
    [CorreoRemitente] [varchar](100) NULL,
    [CorreoCliente] [varchar](100) NULL,
    [CorreosAdicionales] [varchar](max) NULL,
    [Tema] [varchar](100) NULL,
    [Mensaje] [varchar](max) NULL,
    [Fecha] [date] NULL,
    [Hora] [time](5) NULL,
 CONSTRAINT [PK_Mensajes] PRIMARY KEY CLUSTERED 

[Archivos](
    [IdArchivo] [int] IDENTITY(1,1) NOT NULL,
    [IdMensaje] [int] NULL,
    [Nombre] [varchar](max) NULL,
    [Ubicacion] [varchar](50) NULL,
 CONSTRAINT [PK_Archivos] PRIMARY KEY CLUSTERED 
在我正在开发的系统中,有两种方式可以发送消息…:

第一个是,您选择一个客户机,当发送消息时,客户机的ID(IdCliente)从Clientes表中获取,并插入到Mensajes表的新行中。 这样,当您想要检查所有发送的消息时,您可以清楚地看到发送到哪个客户机

第二个是免费的,你可以发送给任何你想要的人,你不需要选择客户。因此,当您注册新消息时,IdCliente列将为null

现在需要注意的是:Vendedor是发送消息的卖家或用户,Archivos表示文件,如果您想附加文件,则会在Archivos中为每一个文件插入一行,并且每个文件都具有相同的IdMensaje

目前,我有一个查询,允许我查看所有邮件(与客户机一起),并显示有多少文件附加到该邮件。这是:

SELECT (Clientes.ApellidoPaterno + ' ' + Clientes.ApellidoMaterno + ' ' + Clientes.Nombre) AS Cliente, Mensajes.* FROM (SELECT Mensajes.IdMensaje, Mensajes.IdCliente, Mensajes.IdVendedor, Mensajes.CorreoRemitente, Mensajes.CorreoCliente, Mensajes.CorreosAdicionales, Mensajes.Tema, Mensajes.Mensaje, Mensajes.Fecha, Mensajes.Hora, COUNT(Archivos.IdArchivo) AS Archivos FROM Mensajes LEFT OUTER JOIN Archivos ON Mensajes.IdMensaje = Archivos.IdMensaje GROUP BY Mensajes.IdMensaje, Mensajes.IdCliente, Mensajes.IdVendedor, Mensajes.CorreoRemitente, Mensajes.CorreoCliente, Mensajes.CorreosAdicionales, Mensajes.Tema, Mensajes.Mensaje, Mensajes.Fecha, Mensajes.Hora) AS Mensajes JOIN Clientes ON Clientes.IdCliente = Mensajes.IdCliente ORDER BY Mensajes.Fecha DESC, Mensajes.Hora DESC
“(Clientes.ApellidoPaterno+“”+Clientes.ApellidoMaterno+“”+Clientes.Nombre)作为客户”显示客户的全名

但是,现在我想有一个查询,其中显示与上面相同的信息。。。再加上以下几点

  • IdCliente=null的邮件
  • 如果IdCliente=null,那么我上面提到的Cliente列将是“”(空白)
如果我需要更具体,请让我知道我必须提供更多信息的部分

我希望你们能帮助我
提前感谢

首先,将您的加入更改为左加入:

LEFT JOIN Clientes ON Clientes.IdCliente = Mensajes.IdCliente
这将允许没有关联IdCliente的邮件保留。要获得所需的空白,请使用合并:

COALESCE(Clientes.ApellidoPaterno + ' ' + Clientes.ApellidoMaterno + ' ' + Clientes.Nombre, '') AS Cliente

请重写你的帖子。就其本身而言,这并不是一个真正的问题。此外,您可能希望在要求他人为您编写查询之前发布更多尝试。