0

我试图了解不同(因此不同的计数)是如何工作的。我有一个数据:

Sessionid, User_solici, code

而在 1SessionID中有 1 User_solici。但是,可能有多个SessionID相同的User_solici.

对于User_solici“a”,我有Session = 1, 55null

我想找到不同的SessionIDwhere (code = 7 and code = 1) OR (code = 7 and code = 2) for the same User_solici

我的查询已完成。

create table mytable 
(
    sessionid varchar(255),
    User_solici varchar(255),
    code varchar(255)
);

insert into mytable (sessionid, User_solici, code)
values 
('1', 'a', '7'),
('1', 'a', '1'),
('1', 'a', '2'),
('1', 'a', '999'),
('2', 'b', '7'),
('2', 'b', '1'),
('2', 'b', '2'),
('2', 'b', '999'),
('55', 'a', '7'),
('55', 'a', '1'),
('55', 'a', '2'),
('', 'a', '7'),
('', 'a', '1'),
('', 'a', '2'),
('', 'c', '7'),
('', 'c', '1'),
('', 'c', '2');

select distinct 
    T1.sessionid
from 
    mytable T1 
join 
    mytable T2 on T1.User_solici = T2.User_solici
               and T1.code = '7' 
               and T2.code in ('1', '2');

select 
    T1.sessionid, 
    T1.User_solici, 
    T1.code as T1code, 
    T2.code as T2code
from 
    mytable T1 
join 
    mytable T2 on T1.User_solici = T2.User_solici
               and T1.code = '7' 
               and T2.code in ('1', '2');

但我试图了解 SQL 的作用。

查看原始表,我看到 5 个 sessionid (1,a), (2,b), (55,a), (,a) (,c) 满足。

或者我只能争辩 4 个 sessionid 作品(1)、(2)、(55)和(空白)

我认为该软件将转到第 1 行,如果代码 = 7,然后加入 User_solici,完成后,选择 distinct(在这种情况下将是会话 1 和空白),将此不同的计数(或最终文件)。完成第 1 行,转到第 2 行。这种情况下,它将创建 5 个计数。

谁能帮我理解在这种情况下 SQL 如何处理连接(或 null)?

谢谢,

哈利

4

1 回答 1

0

首先,无论有多少记录符合条件,DISTINCT 子句都只会返回您选择中所有列的单个实例。

鉴于您对 1、2、55 和空白的第二次评估,您的第一个查询实际上有效。但是因为空白会话有多个用户,所以你的计数中断了。因此,如果您执行了 DISTINCT SessionID AND User_Solici,您将获得我认为您正在寻找的 5 个条目。我只是将您的 T1 标准转移到 WHERE 子句中,因为这与 JOIN 到 T2 表无关

select distinct 
      T1.sessionid,
      T1.User_solici
   from 
      mytable T1 
         join mytable T2
            on T1.User_solici = T2.User_solici
           and T2.code in ('1','2')
   where
      T1.code = '7' 
于 2020-02-24T04:51:21.410 回答