sql如何检查db中存在的多个数据

时间:2014-08-28 19:34:48

标签: sql sql-server database

我们说我有下表。

enter image description here

给定3个用户名和一个公司名称,我需要检查具有给定公司名称的user1,具有相同公司名称的user2和具有相同给定公司名称的user3是否都在表中。如果他们都在桌子上,我的程序将返回ture。如果其中一个不在表中,则返回false。

例如:

  • 鉴于用户A,B,E和公司沃尔玛,我的程序应该返回 假

  • 鉴于用户C,D,E和公司谷歌,我的程序应该返回 真。

实现它的最有效的SQL是什么? 我现在能想到的是用给定公司检查每个用户一次。

e.g. 
   select * from [table] where user = '[given user1]' 
                 and company = '[given company name]'

   select * from [table] where user = '[given user2]' 
                 and company = '[given company name]'

   select * from [table] where user = '[given user3]' 
                 and company = '[given company name]'

总的来说,我需要为每次检查访问数据库3次。我不认为这是一个好方法。

P.S。我正在使用SQL SERVER,但我更喜欢使用普通/通用的sql语句,如果可能的话,它可以适用于大多数不同的数据库。 提前谢谢。

4 个答案:

答案 0 :(得分:0)

您应该使用案例:

 select CASE  when user = '[given user1]' and company = '[given company name]' then "true"  end as [company name], CASE  when user = '[given user2]' and company = '[given company name]' then "true"  end as [company name2]
    from [table]

您可以根据需要为多个公司名称执行此操作。您可以随时将结果CONCAT显示给用户和公司,而不仅仅是示例中的公司。

答案 1 :(得分:0)

您可以使用MIN()CASE执行此操作:

SELECT MIN(CASE WHEN company = 'walmart' THEN 'True' ELSE 'False' END)
FROM  Table1
WHERE users IN ('a','b','e')
--False

SELECT MIN(CASE WHEN company = 'google' THEN 'True' ELSE 'False' END)
FROM  Table1
WHERE users IN ('c','d','e')
--True

如果比较值存储在表格中,您可以使用相同的JOIN代替。

答案 2 :(得分:0)

SELECT CASE WHEN EXISTS (SELECT * FROM [table] WHERE Company = @Company AND UserName = @UserName1)
             AND EXISTS (SELECT * FROM [table] WHERE Company = @Company AND UserName = @UserName2)
             AND EXISTS (SELECT * FROM [table] WHERE Company = @Company AND UserName = @UserName3)
            THEN 1 ELSE 0 
        END AS HasAll3

答案 3 :(得分:0)

我假设如果用户列在多个公司中,如果所有公司都与目标公司一起列出,您仍然希望TRUE返回。只需在列表中查询公司和用户的表格即可。如果您获得正确的点击次数,则为TRUE,否则为FALSE。我不知道你是如何将用户传递给代码的,或者如果可以有不同数量的代码,所以我只是硬编码值,你可以计算出细节。 SQL Fiddle

select  case when count(*) = 3 then 1 else 0 end as OutCome
from    table1
where   Company = 'google'
--    and User in( 'A', 'B', 'C' )  --> should return 0 (false)
--    and User in( 'C', 'D', 'E' )  --> should return 1 (true)
--    and User in( 'D', 'E', 'F' )  --> should return 0 (false)

如果可能同一个用户可以多次列入公司,则您需要添加“不同”用户。到了伯爵。

编辑:我忘了表明即使用户已注册"与多家公司合作: SQL Fiddle