mysql join没有返回预期的id

时间:2014-08-20 12:25:32

标签: mysql sql

我有两张桌子。我想加入他们。

此表是" program_participants"

program_participants

此表是" logsesion"

enter image description here

我的查询

    SELECT a.`id_participant` FROM `program_participants` a
INNER JOIN `logsesion` b
on a.`id_participant` != b.`user_id`
GROUP BY a.`id_participant`

现在运行上面的查询后,我得到了一个。id_participant(1到9表示来自参与者表的所有内容)但我希望除了1和2之外的所有内容,因为它们出现在logsesion表中。你能告诉我我做错了吗?我花了这么多时间在这上面,这似乎是直截了当的。我也试过了符号<>同样。

3 个答案:

答案 0 :(得分:1)

您需要left join,然后进行比较以过滤掉匹配的记录。剩下的那些没有匹配:

SELECT pa.`id_participant`
FROM `program_participants` pa LEFT JOIN
     `logsesion` ls
     ON pa.`id_participant` = ls.`user_id`
WHERE ls.user_id is null;

答案 1 :(得分:0)

我不确定,但这样的事情应该有效:

SELECT a.`id_participant` FROM `program_participants` a
LEFT JOIN `logsesion` b
ON a.`id_participant` = b.`user_id`
GROUP BY a.`id_participant`
HAVING b.`user_id` IS NULL

答案 2 :(得分:0)

如果你真的想加入这些表,你可以尝试这一点,这将使这些表的笛卡尔积产品过滤已经在logsesion表中的用户ID。如果您想要不同的结果评论如下:

SELECT pa.`id_participant`
FROM `program_participants` pa JOIN
     `logsesion` ls
WHERE pa.`id_participant` NOT IN 
(
 SELECT user_id from `logsesion`
);