1

我在连接三个表中的数据时遇到了困难。

这是一家房地产公司的匿名购物车。inmuebles 表包含属性的详细信息。如果有人想要查看,我会使用他们的 asp.net sessionid 在 temppropertylist 表中创建一条记录,并在 anonymouscart 表中添加他们感兴趣的属性的记录。

我在 gridview 控件中显示这个,所以当我重新绑定它时,我需要一个查询,从三个表中提取信息,显示所有属性数据,以及每个属性是否已被选中进行查看。为此,将来自anonymouscart 的propertyid 或null 连接到inmuebles 表中的每条记录就足够了,因为我可以使用它来切换复选框。

我发现我的原始查询是从匿名购物车中提取 temppropertylist 表中所有相关记录的信息,所以我尝试使用连接中的 sessionid 过滤它,但它现在只显示存在相关的 inmuebles 记录在匿名购物车中记录。

我已经阅读了 Stackoverflow 上的所有列表,但我无法理解我做错了什么

CREATE TABLE [dbo].[anonymouscart](
[Id] [int] IDENTITY(1,1) NOT NULL,
[temppropertylist_id] [int] NOT NULL,
[timestamp] [datetime2](7) NOT NULL,
[propertyid] [int] NULL
) ON [PRIMARY]

Id  temppropertylist_id timestamp                     propertyid
40  38                  2013-09-24 08:24:00.0772687 2
39  37                  2013-09-24 08:03:56.1163987 1

CREATE TABLE [dbo].[temppropertylist](
[ID] [int] IDENTITY(1,1) NOT NULL,
[sessionID] [nvarchar](50) NULL,
[userID] [int] NULL,
[timestamp] [datetime2](7) NOT NULL
) ON [PRIMARY]

ID  sessionID                   userID  timestamp
37  jgyo5i4vne35bcolow23je1q    NULL      2013-09-24 08:02:29.1129679
38  uuoawmav4jhi3hy3g3v4vr3o    NULL      2013-09-24 08:23:58.8604375

CREATE TABLE [dbo].[Inmuebles](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](99) NULL,
[tipodemanda] [nvarchar](10) NULL,
[Descripcioni] [nvarchar](max) NULL,
[PrecioVenta] [int] NULL,
[Imagen] [nvarchar](255) NULL,
[onhold] [bit] NOT NULL,
) ON [PRIMARY]

我的查询:

SELECT  inmuebles.title
    ,   inmuebles.Descripcioni
    ,   inmuebles.ID
    ,   inmuebles.PrecioVenta
    ,   inmuebles.imagen
    ,   MIN(anonymouscart.propertyID) AS propertyID
FROM inmuebles
FULL OUTER JOIN anonymouscart ON Inmuebles.ID = anonymouscart.propertyID
FULL OUTER JOIN temppropertylist ON anonymouscart.temppropertylist_id = temppropertylist.ID 
    AND (temppropertylist.sessionid = 'uuoawmav4jhi3hy3g3v4vr3o')
WHERE tipodemanda = 'venta'
    AND onhold = 0
GROUP BY
        inmuebles.title
    ,   inmuebles.Descripcioni
    ,   inmuebles.ID
    ,   inmuebles.PrecioVenta
    ,   inmuebles.imagen

这将返回:

title        Descripcioni     id PrecioVenta imagen propertyid
'Two for One' 'This is a ....' 2  110000     NULL   2

但我想要的是 inmuebles 表中的所有记录,其中 propertyid 为空

这是来自 inmuebles 表的数据:

title           Descripcioni         id    PrecioVenta   imagen                     onhold  tipodemanda
'Casa Bodega',  'This is a...',     1,   11000,        '1_27152256.jpg',0,              'venta'
'Two for One',  'This is a...',   2,     110000,          NULL,             0,         'venta'
4

1 回答 1

1

首先,必须使用派生表,然后才加入 Inmuebles 表

SELECT  inmuebles.title
    ,   inmuebles.Descripcioni
    ,   inmuebles.ID
    ,   inmuebles.PrecioVenta
    ,   inmuebles.imagen
    ,   MIN(x.propertyID) AS propertyID 
FROM inmuebles
LEFT JOIN (SELECT anonymouscart.propertyID
           FROM anonymouscart JOIN temppropertylist
             ON anonymouscart.temppropertylist_id = temppropertylist.ID
           AND temppropertylist.sessionid = 'uuoawmav4jhi3hy3g3v4vr3o'
           ) x ON Inmuebles.ID = x.propertyID
WHERE tipodemanda = 'venta' AND onhold = 0
GROUP BY
        inmuebles.title
    ,   inmuebles.Descripcioni
    ,   inmuebles.ID
    ,   inmuebles.PrecioVenta
    ,   inmuebles.imagen
于 2013-09-25T14:45:09.267 回答