Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL多表用户\u id不存在查询_Mysql - Fatal编程技术网

MySQL多表用户\u id不存在查询

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

我有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
用户表包含所有用户信息。 列表表包含有关拍卖列表的信息。此表的状态列用于确定列表是活动的还是已结束的。 计费表包含与用户计费详细信息相关的信息

所有表都基于用户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