具有多个条件的左外连接 - 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)
我 运行 遇到了一些非常简单的查询问题。我认为这一定是因为对 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)