2017-10-05 182 views
0

我有1个表中有多行用户记录。我试图找出谁更改了他们的个人识别号码,谁没有。多个SQL运行两个查询,然后查询一个结果的结果

我将表格导入到ACCESS中,我可以在3个查询中创建我要查找的结果。我想在SQL服务器上将这3个查询重做为一个。

查询1:

SELECT [dbo].[USER].USERNAME 
FROM [dbo].[USER] 
WHERE [dbo].[USER].SYSTEMNAME NOT LIKE 'DOMAIN/$SPARE' 
    AND [dbo].[USER].TYPE LIKE 'voice' 

查询2:

SELECT [dbo].[USER].[USERNAME], [dbo].[USER].[KEYNAME], [dbo].[USER].[STRINGVALUE] 
FROM [dbo].[USER] 
WHERE [dbo].[USER].TYPE = 'PIN_UPDATED') 

第三个查询将返回的最终结果:

SELECT 
    [query1].[USERNAME], [query2].[USERNAME], 
    [query2].[KEYNAME], [query2].[STRINGVALUE] 
FROM 
    [query1] 
LEFT JOIN 
    [query2] ON [query1].USERNAME = [query2].USERNAME 

使用UNION,INNER JOIN和其他人,我得到不同类型的错误而没有结果。

回答

0

有兴趣知道你的查询是什么样子,什么错误,但这里是一个潜在方法,利用CTE:

;WITH Query1 AS 
(
    SELECT [USERNAME] 
    FROM [dbo].[USER] 
    WHERE [dbo].[USER].SYSTEMNAME NOT LIKE 'DOMAIN/$SPARE' 
    AND  [dbo].[USER].[TYPE]  LIKE  'voice' 
) 
,Query2 AS 
(
    SELECT [USERNAME]   , 
      [KEYNAME]   , 
      [STRINGVALUE] 
    FROM [dbo].[USER] 
    WHERE [dbo].[USER].[TYPE] = 'PIN_UPDATED' 
) 
SELECT  Q1.[USERNAME]  , 
      Q2.[USERNAME]  , 
      Q2.[KEYNAME]  , 
      Q2.[STRINGVALUE] 
FROM  [Query1] AS Q1 
LEFT JOIN [query2] AS Q2  ON Q1.USERNAME = Q2.USERNAME; 
+0

谢谢Leonidas199x, – auldh

+0

你的代码工作!得到我的结果我将用它作为进一步多重查询的模板。 – auldh

+0

我想添加一个时间>超过30天,但我的查询不被SQL – auldh

0
SELECT u1.USERNAME,u2.[KEYNAME], u2.[STRINGVALUE] 
FROM [dbo].[USER] AS u1 
LEFT JOIN [dbo].[USER] AS u2 ON u1.USERNAME=u2.USERNAME AND u2.TYPE Like 'PIN_UPDATED' 
WHERE u1.SYSTEMNAME Not Like 'DOMAIN/$SPARE' AND u1.TYPE Like 'voice'