MySQL多表user_id不存在查询

时间:2013-03-27 03:00:13

标签: mysql

我有3个这样的表:

User table
user_id     first_name     email
1           Bob            bob@bob.com
2           Jane           jane@jane.com
3           Fred           fred@fred.com

Listing
listing_id  user_id        status
1           1              1
2           1              1
3           2              1
4           3              1

User billing
billing_id  user_id        status
1           1              1
2           2              1

用户表包含所有用户信息。 列表包含有关拍卖列表的信息。此表的状态列用于确定列表是处于活动状态还是已结束。 帐单表包含与用户帐单明细相关的信息。

所有表都基于user_id相关。我想要提取的是用户拥有活动列表但尚未输入其结算明细的所有用户信息。因此,上表示例的期望结果将是

user_id     first_name     email
3           Fred           fred@fred.com
弗雷目前有一个有效的列表,但尚未填写他的账单信息。

非常感谢。

3 个答案:

答案 0 :(得分:1)

你可以试试这样的东西。

select * from usertable inner join listing on usertable.user_Id=listing.user_Id 

使用此功能,您可以从这两个表中获取数据。 你明白了我的意思吗?

答案 1 :(得分:0)

SELECT u.*
FROM User u
INNER JOIN Listing l USING (user_id)
LEFT OUTER JOIN User_billing b USING (user_id)
WHERE b.user_id IS NULL;

答案 2 :(得分:0)

...试

SELECT user.user_id, user.first_name, user.email 
FROM user 
LEFT JOIN listing ON listing.user_id = user.user_id AND listing.status = 1
WHERE user.user_id NOT IN (SELECT user_id FROM billing)

...或

SELECT user.user_id, user.first_name, user.email 
FROM user 
LEFT JOIN listing ON listing.user_id = user.user_id AND listing.status = 1
LEFT JOIN billing ON billing.user_id = user.user_id
WHERE billing.user_id IS NULL

我建议第一种方法优先于第一种方法,因为NOT IN和执行时间与LEFT JOIN的关系要快得多并且使用的资源更少