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

时间:2014-08-12 15:47:03

标签: mysql sql join

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

表1:

╔══════╦══════╗
║ D_ID ║ E_ID ║
╠══════╬══════╣
║    5 ║   25 ║
║    5 ║   26 ║
║    5 ║   27 ║
║   10 ║   30 ║
║   10 ║   31 ║
║   10 ║   32 ║
╚══════╩══════╝

表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 ║
╚══════╩══════╩══════╝

期望的输出:

╔══════╦══════╦═════════════╗
║ 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 ║
╚══════╩══════╩═════════════╝

使用此查询:

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

加入很重要,因为表2是巨大的表,有数百万条记录,表1只有几千条记录,这就是我所需要的。我不需要所有D_IDE_ID' s。我只需要D_ID中的E_IDTable1

1 个答案:

答案 0 :(得分: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

我个人对加入桌子的偏好是这样的

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

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