MySQL多表用户\u id不存在查询
我有3张这样的桌子:MySQL多表用户\u id不存在查询,mysql,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
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
用户表包含所有用户信息。
列表表包含有关拍卖列表的信息。此表的状态列用于确定列表是活动的还是已结束的。
计费表包含与用户计费详细信息相关的信息
所有表都基于用户id进行关联。我要提取的是用户有活动列表但未输入其账单详细信息的所有用户信息。因此,上述表格示例的预期结果是
user_id first_name email
3 Fred fred@fred.com
因为Fred目前有一个活动列表,但尚未填写他的账单信息
非常感谢。试试
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;
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)
或者
我建议使用第二种方法而不是第一种方法,因为NOT IN和执行时间比LEFT JOIN快得多,而且使用的资源更少。您可以尝试这样的方法
select * from usertable inner join listing on usertable.user_Id=listing.user_Id
使用此选项,您可以从这两个表中获取数据。
你明白我的意思了吗?我尝试了一些左连接,有些是空的,但都没有产生我需要的结果。不在将起作用,但执行左连接需要更多的时间和资源。这一个不起作用。即使用户有不活动的列表,它也会产生结果。它显示的是尚未添加计费详细信息的用户,但不限于活动列表。您应该添加WHERE user.user\u id not IN SELECT user\u id FROM billing此项功能似乎有效,谢谢。我加入了WHERE l.status条款,效果很好。
select * from usertable inner join listing on usertable.user_Id=listing.user_Id