【问题标题】:Accessing a new table created after a join访问连接后创建的新表
【发布时间】:2019-01-30 16:46:13
【问题描述】:

我已使用以下方法将 3 个表中的选择列连接到一个新表中:

    SELECT A.ExternalID, A.UserDefinedXml.value('(Skin_Sheet/@Label)[1]', 'varchar(3)') AS SS, A.ServiceSiteUid, A.LastModifiedDate, A.PersonUid,
       B.FirstName, B.LastName, B.PersonUid,
       C.Name

  FROM Patient A
  INNER JOIN Person B ON B.PersonUid = A.PersonUid
  INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
  WHERE SS IS NOT NULL
  ORDER By LastModifiedDate;

这一切都有效,但我不确定如何引用从 XML 中提取的数据创建的列 SS,因此我只能选择值为“是”或“否”的观察值。在 R 中,我会创建一个新对象,但如果我不指定表名是什么,我不确定 SQL 如何存储这个新表。

旁注,我确实尝试将其插入到新表中,但 SQL 不允许我这样做,因为出于某种原因,连接导致 PersonUid 被复制。

提前感谢您,我对 SQL 非常非常陌生,并且正在努力学习。

【问题讨论】:

  • 这只是一个查询。您没有将数据存储在任何地方。您可以SELECT ... INTO ... 从数据中创建一个表,然后引用该表。如果您在使用完数据后不需要保留数据,也可以使用临时表,或者如果您只需要单个查询的值,则可以使用子查询或 CTE。
  • 请阅读minimal reproducible example。也请使用文本,而不是图像/链接,用于文本,包括表格和 ERD。

标签: sql-server join temp-tables


【解决方案1】:

从概念上讲,WHERE 位于 SELECT 之前,因此您需要将查询推送到派生表子查询或公用表表达式 (CTE) 中,以在 WHERE 子句中引用 SS。 EG

with q as
(
    SELECT A.ExternalID, A.UserDefinedXml.value('(Skin_Sheet/@Label)[1]', 'varchar(3)') AS SS, A.ServiceSiteUid, A.LastModifiedDate, A.PersonUid,
       B.FirstName, B.LastName, B.PersonUid,
       C.Name

  FROM Patient A
  INNER JOIN Person B ON B.PersonUid = A.PersonUid
  INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
)
SELECT *
FROM q
WHERE SS IS NOT NULL
ORDER By LastModifiedDate;

【讨论】:

    【解决方案2】:

    这会将您的结果放入临时表中,并避免两列同名的问题:

    SELECT
        A.ExternalID
        ,SS = A.UserDefinedXml.value('(Skin_Sheet/@Label)[1]', 'varchar(3)')
        ,A.ServiceSiteUid
        ,A.LastModifiedDate
        ,PersonUid_A = A.PersonUid
        ,B.FirstName
        ,B.LastName
        ,PersonUid_B = B.PersonUid
        ,C.Name
    INTO #TempResults
    FROM Patient A
    INNER JOIN Person B ON B.PersonUid = A.PersonUid
    INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
    WHERE SS IS NOT NULL
    ORDER BY LastModifiedDate;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多