无法确定此连接是否给出了错误的结果

use*_*500 1 mysql sql join

我有两张桌子想加入,但我无法得到理想的答案.我试图在两个主键和分组thrid列的基础上联合两个表,并希望得到第三列的计数.

表格1:

???????????????
? D_ID ? E_ID ?
???????????????
?    5 ?   25 ?
?    5 ?   26 ?
?    5 ?   27 ?
?   10 ?   30 ?
?   10 ?   31 ?
?   10 ?   32 ?
???????????????
Run Code Online (Sandbox Code Playgroud)

表2:

??????????????????????
? D_ID ? E_ID ? L_ID ?
??????????????????????
?    5 ?   25 ?    1 ?
?    5 ?   25 ?    2 ?
?    5 ?   25 ?    3 ?
?    5 ?   25 ?    4 ?
?    5 ?   26 ?    5 ?
?    5 ?   26 ?    6 ?
?    5 ?   26 ?    7 ?
?    5 ?   26 ?    8 ?
?    5 ?   27 ?    9 ?
?   10 ?   30 ?   10 ?
?   10 ?   30 ?   11 ?
?   10 ?   31 ?   12 ?
?   10 ?   31 ?   13 ?
?   10 ?   32 ?   14 ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)

期望的输出:

?????????????????????????????
? D_ID ? E_ID ? Count(L_ID) ?
?????????????????????????????
?    5 ?   25 ?           4 ?
?    5 ?   26 ?           4 ?
?    5 ?   27 ?           1 ?
?   10 ?   30 ?           2 ?
?   10 ?   31 ?           2 ?
?   10 ?   32 ?           1 ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)

使用此查询:

select a.D_ID, a.E_ID, count(b.L_ID)
from table1 a, table2 b
where a.D_ID = b.D_ID and
      a.E_ID = b.E_ID 
group by a.D_ID, a.E_ID
Run Code Online (Sandbox Code Playgroud)

加入很重要,因为表2是包含数百万条记录的表,而表1只有我需要的几千条记录.我不需要所有的D_IDE_ID.我只需要那些D_IDE_ID它们在Table1.

Joh*_*ell 9

只需在计数中添加一个DISTINCT子句就像这样

SELECT 
    a.D_ID, a.E_ID, COUNT(DISTINCT b.L_ID)
FROM table1 a, table2 b
WHERE a.D_ID = b.D_ID 
  AND a.E_ID = b.E_ID 
GROUP BY a.D_ID, a.E_ID
Run Code Online (Sandbox Code Playgroud)

我个人喜欢加入桌子就是这样

SELECT a.d_id, a.e_id, COUNT(DISTINCT b.l_id)
FROM table1 a
JOIN table2 b ON a.D_ID = b.D_ID 
             AND a.E_ID = b.E_ID 
GROUP BY a.D_ID, a.E_ID
Run Code Online (Sandbox Code Playgroud)

看到这个DEMO用正确的结果集执行所有两个查询