我有一个包含4列用户信息的表。每个表都包含以下列:
Username | Full_Name | Job_Name | Current_Job_Allowed
表1包括他们有权查看的所有用户和Job_Name。这意味着表1中有多个具有相同用户名的行具有不同的Job_Name值。
表2包含所有可能用户的列表。
Username |Full_Name
--------------+-----------------
amunoz |Andrew Munoz
csmith |Carl Smith
cwatkins |Cat Watkins
ggriffiths |Garmin Griffiths
jcarr |Jason Carr
jhothi |Jark Hothi
jphillips |Jim Phillips
lbradfield |Lisa Bradfield
ntaylor |Noria Taylor
rfelipe |Ralf Felipe
查询1包含我指定的查询参数指定的所有用户,即' KML_20160531'。
我现在想要为我为Job_Name指定的参数选择一个具有不同Job_Name的所有用户的DISTINCT列表。例如,表1包含:
Username|Full_Name |Job_Name |Current_Job_Allowed
--------+------------+------------+----------------------
amunoz |Andrew Munoz|KML_20160531|1
jcarr |Jason Carr |KML_20160531|1
rfelipe |Ralf Felipe |KML_20140531|1
amunoz |Andrew Munoz|KML_20160431|1
当我输入20160531作为Job_Name时,我想返回以下内容。这将返回我输入的Job_Name值的所有可能的新用户。
Username |Full_Name
--------------+---------------
csmith |Carl Smith
cwatkins |Cat Watkins
ggriffiths |Garmin Griffiths
jhothi |Jark Hothi
jphillips |Jim Phillips
lbradfield |Lisa Bradfield
ntaylor |Noria Taylor
rfelipe |Ralf Felipe
答案 0 :(得分:1)
您可以使用not in和distinct
select distinct a.username, a.fullname
from table1 as a
where a.username not in (select distinct username
from table2 where job_name ='my_value');
仅针对作业
select distinct a.username, a.fullname
from table1 as a
where a.username not in (select username
from table2
group by username
having count(job_name) = 1
and job_name ='my_value' );
答案 1 :(得分:1)
您根本不需要DISTINCT
来查询此查询:
select t.*
from table1 as t
where not exists (select 1
from table2 as t2
where t2.username = t.username and t2.job_name = "KML_20160531"
);
根据您对问题的描述,Current_Job_Allowed
似乎并不相关。
答案 2 :(得分:1)
此参数查询将显示哪些用户的Table 1
行Job_Name
与参数值匹配:
PARAMETERS which_job Text ( 255 );
SELECT t1.[Username], t1.Job_Name
FROM [Table 1] AS t1
WHERE t1.Job_Name=[which_job];
因此,您可以将其用作子查询,将连接Table 2
保留到子查询中,并选择“右侧”为空的行:
PARAMETERS which_job Text ( 255 );
SELECT t2.[Username]
FROM
[Table 2] AS t2
LEFT JOIN
(
SELECT t1.[Username]
FROM [Table 1] AS t1
WHERE t1.Job_Name=[which_job]
) AS sub
ON t2.[Username] = sub.[Username]
WHERE sub.[Username] Is Null;
假设查询返回正确的行,请将您要查看的其他字段添加到SELECT t2.[Username]
。
除非DISTINCT
允许重复的Table 2
值,否则您不应该需要Username
,或Table 1
允许使用Username
和{的相同组合的多个行{1}}。
答案 3 :(得分:0)
这将是您的问题的语法
SELECT DISTINCT UserName
FROM Table1
WHERE UserName NOT IN (
SELECT UserName From Table2
WHERE job_name = ''
);