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

时间:2015-08-28 17:27:37

标签: mysql sql oracle left-join

我遇到一些非常简单的查询问题。我认为必须是因为关于SQL查询如何工作的错误假设。 我正在尝试使用下表编写一个简单的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)

我想做的是:   在给定以下条件的情况下,从id表中显示所有tmuser:    - 那个id!='1'    - id不在表tmtrip_viewer中,其中tmtrip_viewer.tmtrip_id = 7.

基本上,我想让所有未查看tmtrip的用户使用tmtrip_id = 7(除了登录用户..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'

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

2 个答案:

答案 0 :(得分:2)

AND b.tmtrip_id IS NULL添加到WHERE。您的查询是获取所有tmusers和他们的&#34;旅行7&#34;如果他们有任何信息;这会将结果减少到只有没有&#34;旅行7&#34;资讯

答案 1 :(得分:0)

我认为这应该做你想要的。

它会为每个没有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)