具有多个条件的左外连接 - MYSQL

Left outer join with multiple conditions - MYSQL

我 运行 遇到了一些非常简单的查询问题。我认为这一定是因为对 SQL 查询如何工作的假设不正确。 我正在尝试使用以下 tables:

编写一个简单的 LEFT OUTER JOIN 查询
tmtrip_viewer( tmtrip_id, tmuser_id )      -> FKs: (tmtrip.id, tmuser.id)
Values: ( 6, 2 )
        ( 6, 3 )
        ( 7, 4 )

tmtrip( id, ...)
Values: (1, ...)
        (2, ...)
        (3, ...)
        (4, ...)

tmuser(id, username, ...)
Values: (1, user1)
        (2, user2)
        (3, user3)
        (4, user4)

我想做的是: 在满足以下条件的情况下显示 tmuser table 中的所有 id: - id != '1' - ID 不在 table tmtrip_viewer 中 tmtrip_viewer.tmtrip_id = 7.

基本上,我想获取所有未使用 tmtrip_id = 7 查看 tmtrip 的用户(登录用户 ..id='1' 除外)。

我制定了以下查询,但它没有按预期运行:

SELECT a.`id`, a.`username` FROM 
`tmuser` a LEFT OUTER JOIN `tmtrip_viewer` b
ON a.`id` = b.`tmuser_id` AND b.`tmtrip_id` = '7'
WHERE a.id <> '1'

为什么这不起作用?这样做的正确方法是什么?

AND b.tmtrip_id IS NULL 添加到您的 WHERE。您的查询正在获取所有 tmuser 及其 "trip 7" 信息(如果有的话);这会将结果减少到只有那些没有 "trip 7" 信息的结果。

我认为这应该可以满足您的要求。

它将为没有 ID = 1 并且在 tm_tripviewer 中没有记录且 tmtrip_id = 7 的每个用户显示一条记录。

SELECT id, username
FROM tmuser
WHERE id != 1
AND id NOT IN
(SELECT id FROM tmtrip_viewer WHERE tmtrip_id = 7)