我有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
弗雷目前有一个有效的列表,但尚未填写他的账单信息。
非常感谢。
答案 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的关系要快得多并且使用的资源更少