我很难加入三张桌子的数据。
这是一家房地产公司的匿名购物车。 inmuebles表保存属性的详细信息。 如果有人想要查看,我使用他们的asp.net sessionid在temppropertylist表中创建一条记录,并且在 anonymouscart表我添加了他们感兴趣的属性的记录。
我在gridview控件中显示这个,所以当我重新绑定它时,我需要一个从三个表中提取信息的查询, 显示所有属性数据,以及是否已选择每个属性进行查看。要做到这一点就足够了 要将anonymouscart中的propertyid或null连接到inmuebles表中的每个记录,因为我可以使用它来切换复选框。
我发现我的原始查询是从匿名购物车中提取信息中的所有相关记录 temppropertylist表所以我试图使用连接中的sessionid过滤它,但现在它只显示inmuebles记录 是anonymouscart中的相关记录。
我已经阅读了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'
答案 0 :(得分: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