SQL联接-如果联接的表不';我不能保存任何数据

SQL联接-如果联接的表不';我不能保存任何数据,sql,join,Sql,Join,我有一个将3个表连接在一起的查询。 一个是Spa预约表-(Spa预约,价格在) 第二个是SPAAPTADDONS——约会的插件(Nibbles等),APT和rst之间的链接 第三个是RSTCATALOG表-加载项价格所在的位置 查询: SELECT SPAAPPOINTMENTS.APTID, SPAAPPOINTMENTS.SERVICECODE, SPAAPPOINTMENTS.LOCATIONCODE, SPAAPPOINTMENTS.STAFFCODE,

我有一个将3个表连接在一起的查询。 一个是Spa预约表-(Spa预约,价格在) 第二个是SPAAPTADDONS——约会的插件(Nibbles等),APT和rst之间的链接 第三个是RSTCATALOG表-加载项价格所在的位置

查询:

SELECT        SPAAPPOINTMENTS.APTID, SPAAPPOINTMENTS.SERVICECODE, SPAAPPOINTMENTS.LOCATIONCODE, SPAAPPOINTMENTS.STAFFCODE, 
                         SPAAPPOINTMENTS.BLOCKSTARTTIME, SPAAPPOINTMENTS.BLOCKENDTIME, SPAAPPOINTMENTS.I_RECID, SPAAPPOINTMENTS.S_STAYID, 
                         SPAAPPOINTMENTS.STATUSCODE, SPAAPPOINTMENTS.BLOCKEDTIME, SPAAPPOINTMENTS.GRATUITY, SPAAPPOINTMENTS.TEMPHOLDID, 
                         SPAAPPOINTMENTS.LASTCHGID, SPAAPPOINTMENTS.CANCELID, SPAAPPOINTMENTS.ITEMNO, SPAAPPOINTMENTS.COMMENTS, 
                         SPAAPPOINTMENTS.OFFSITELOCATION, SPAAPPOINTMENTS.PRICE, SPAAPPOINTMENTS.PRIORITY, SPAAPPOINTMENTS.SPAPKGCODE, 
                         SPAAPPOINTMENTS.ENFORCEGENDER, SPAAPPOINTMENTS.NEWSTATUS, SPAAPPOINTMENTS.RESTNO, SPAAPPOINTMENTS.DONOTMOVE, 
                         SPAAPPOINTMENTS.NOSHOW, SPAAPPOINTMENTS.OTHERGENDERREQUESTED, SPAAPPOINTMENTS.MADEBY, SPAAPPOINTMENTS.LINKCODE, 
                         SPAAPPOINTMENTS.CONFIRMED, SPAAPPOINTMENTS.CXLNUMBER, SPAAPPOINTMENTS.REQUEST, SPAAPPOINTMENTS.CUSTOMFIELD1, 
                         SPAAPPOINTMENTS.CUSTOMFIELD2, SPAAPPOINTMENTS.CUSTOMFIELD3, SPAAPPOINTMENTS.VIP, SPAAPPOINTMENTS.NOPREFERENCE, 
                         SPAAPPOINTMENTS.CUSTOMFIELD4, SPAAPPOINTMENTS.CUSTOMFIELD5, SPAAPPOINTMENTS.BOOKID, SPAAPPOINTMENTS.ARTSRESVNO, 
                         SPAAPPOINTMENTS.LMSCONFNO, SPAAPPOINTMENTS.ARTSGUESTID, SPAAPPOINTMENTS.CLUBNO, SPAAPPOINTMENTS.MULTIGRPID, 
                         SPAAPPOINTMENTS.MAINCONTACT, SPAAPPOINTMENTS.SPABKNAME, SPAAPPOINTMENTS.MULTIGRPAPPTXT, SPAAPPOINTMENTS.CONFCOMMENTS, 
                         SPAAPPOINTMENTS.MEMCODE, SPAAPPOINTMENTS.FAMILYMEMTYPE, SPAAPPOINTMENTS.COCOMMENTS, SPAAPPOINTMENTS.GRPMASTERID, 
                         SPAAPPOINTMENTS.GUESTTYPE, SPAAPPOINTMENTS.EXTUNIQUEID, SPAAPPOINTMENTS.SETUPTIME, SPAAPPOINTMENTS.BREAKDOWNTIME, 
                         SPAAPPOINTMENTS.PSBASEPRICE, SPAAPPOINTMENTS.PSCODE, SPAAPPOINTMENTS.PSCALENDARADJPCT, SPAAPPOINTMENTS.PSDETAILADJ, 
                         SPAAPPOINTMENTS.PSPRICE, SPAAPPOINTMENTS.PSDETAILADJSOURCE, SPAAPPOINTMENTS.PSDETAILADJTYPE, SPAAPPOINTMENTS.PSPRICETYPE, 
                         RSTCATALOG.C_DPRICE
FROM  SPAAPPOINTMENTS 
  INNER JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID 
  INNER JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM
这将返回约会表中的所有数据,只要他们有Spa约会的附加项

如果他们只是有一个约会,没有附加功能,它不会返回数据。 例如,如果我使用查询并将其后缀为:
WHERE(spaaccessions.APTID=626746)

它没有显示任何数据,但SPAApportions中有一行,而addons表中没有任何内容

如果我使用另一个apid,它有一个插件,它会显示数据并从查询中输出


如果SPAAPTADONS表中没有数据,我如何显示数据?请任何人?

更改下面的
内部联接

INNER JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
INNER JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 
左侧外部联接
类似

LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
LEFT JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 

更改下面的
内部联接

INNER JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
INNER JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 
左侧外部联接
类似

LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
LEFT JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 

更改下面的
内部联接

INNER JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
INNER JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 
左侧外部联接
类似

LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
LEFT JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 

更改下面的
内部联接

INNER JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
INNER JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 
左侧外部联接
类似

LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID
LEFT JOIN RSTCATALOG ON SPAAPPTADDONS.ITEMNO = RSTCATALOG.C_ITEM 
让SPA约会中的所有数据都包含在结果中

让SPA约会中的所有数据都包含在结果中

让SPA约会中的所有数据都包含在结果中


让SPAAppointment中的所有数据都包含在结果中。

将表连接在一起时,指定一个左表和一个右表。
内部联接将生成一个集合,其中联接条件对左侧和右侧都为真

您想要得到的是一个集合,其中包含来自左侧表的所有数据以及来自右侧的匹配数据。这是一个
左连接

但是,由于您还想获得插件的定价信息,因此也需要加入第三个表。因为我们可以假设插件和定价表之间存在一对一的匹配,所以看起来我们可以在这里使用
内部联接
,但这不起作用,因为联接是按顺序执行的,这意味着最后一个联接将使用第一个联接的结果作为其左侧(对于没有任何加载项的约会,该集合将具有空值)-如果我们尝试对定价表执行
内部联接
,则这些行将被排除,因此这里也需要
左联接

最后,你想要的是:

FROM SPAAPPOINTMENTS 
LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID 
LEFT JOIN RSTCATALOG    ON SPAAPPTADDONS.ITEMNO  = RSTCATALOG.C_ITEM
另一方面,我建议您使用表别名,使查询更简短、更可读。类似如下:

FROM SPAAPPOINTMENTS    apt
LEFT JOIN SPAAPPTADDONS add ON apt.APTID  = add.APTID 
LEFT JOIN RSTCATALOG    rst ON add.ITEMNO = rst.C_ITEM

将表连接在一起时,指定一个左表和一个右表。
内部连接将生成一个集合,其中左侧和右侧的连接条件均为true

您想要的是获得一个集合,该集合包含来自左侧表的所有数据以及来自右侧的匹配数据。这是一个
左联接

但是,由于您还想获取加载项的定价信息,您也需要加入第三个表。由于我们可以假设加载项和定价表之间存在一对一的匹配,因此看起来我们可以在此处使用
内部联接
,但这不起作用,因为联接是按顺序执行的,这意味着最后一次联接将是u将第一个联接的结果作为其左侧(该集合对于没有任何加载项的约会将具有空值)-如果我们尝试使用定价表执行
内部联接
,则这些行将被排除,因此这里也需要
左联接

最后,你想要的是:

FROM SPAAPPOINTMENTS 
LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID 
LEFT JOIN RSTCATALOG    ON SPAAPPTADDONS.ITEMNO  = RSTCATALOG.C_ITEM
另一方面,我建议您使用表别名,使查询更简短、更可读。类似如下:

FROM SPAAPPOINTMENTS    apt
LEFT JOIN SPAAPPTADDONS add ON apt.APTID  = add.APTID 
LEFT JOIN RSTCATALOG    rst ON add.ITEMNO = rst.C_ITEM

将表连接在一起时,指定一个左表和一个右表。
内部连接将生成一个集合,其中左侧和右侧的连接条件均为true

您想要的是获得一个集合,该集合包含来自左侧表的所有数据以及来自右侧的匹配数据。这是一个
左联接

但是,由于您还想获取加载项的定价信息,您也需要加入第三个表。由于我们可以假设加载项和定价表之间存在一对一的匹配,因此看起来我们可以在此处使用
内部联接
,但这不起作用,因为联接是按顺序执行的,这意味着最后一次联接将是u将第一个联接的结果作为其左侧(该集合对于没有任何加载项的约会将具有空值)-如果我们尝试使用定价表执行
内部联接
,则这些行将被排除,因此这里也需要
左联接

最后,你想要的是:

FROM SPAAPPOINTMENTS 
LEFT JOIN SPAAPPTADDONS ON SPAAPPOINTMENTS.APTID = SPAAPPTADDONS.APTID 
LEFT JOIN RSTCATALOG    ON SPAAPPTADDONS.ITEMNO  = RSTCATALOG.C_ITEM
另一方面,我建议您使用表别名,使查询更简短、更可读。类似如下:

FROM SPAAPPOINTMENTS    apt
LEFT JOIN SPAAPPTADDONS add ON apt.APTID  = add.APTID 
LEFT JOIN RSTCATALOG    rst ON add.ITEMNO = rst.C_ITEM

将表连接在一起时,指定一个左表和一个右表。
内部连接将生成一个集合,其中左侧和右侧的连接条件均为true

您想要的是获得一个集合,该集合包含来自左侧表的所有数据以及来自右侧的匹配数据。这是一个
左联接

但是,由于您还想获取加载项的定价信息,您也需要加入第三个表。由于我们可以假设加载项和定价表之间存在一对一的匹配,因此看起来我们可以在此处使用
内部联接
,但这不起作用,因为联接是按顺序执行的,这意味着最后一次联接将是u将第一个联接的结果作为其左侧(该集合对于没有任何加载项的约会将具有空值)-如果我们尝试对定价表执行
内部联接
,则这些行将被排除,