如何仅在其他表中的行不存在时返回行

时间:2015-02-27 16:38:57

标签: mysql

我有一个结合了两个表的视图,一个叫做"项目"另一个叫"提供"。项目可以有很多优惠,用户可以为很多项目提供服务。

我想向用户显示一个" all"项目(用户已经提出的项目)和"新项目" (用户尚未提出要约的那些)。

"所有"简单。但是我和#34; new"名单。

我需要有一个遍历所有项目的查询,并且只返回我想要显示列表的用户的商品表中没有条目的项目(但该表可以有其他商品或NO OFFERS)。

我希望这对某人有意义。我正在训练几个小时才能把它弄好......

作为旁注:到目前为止左边的视图连接两个表并为每个项目返回与提供的行数一样多的行(我希望匹配查询的用户在运行时生成)。

表项目: PROJECT_ID project_owner_id 其他一些领域

表格提供: offer_id PROJECT_ID offer_maker_id 其他一些领域

所以,在项目表中,那里当然没有提供报价的人的身份。现在如何选择特定用户没有多少优惠的项目?

内部联接不起作用,因为我得到了太多的行,因为我得到了每个项目的每个提议,而user_id不是有问题的用户。

2 个答案:

答案 0 :(得分:0)

我将这张图片贴在我的墙上贴出了这样的问题:http://www.codeproject.com/KB/Database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg你想要左上角的那个(LEFT JOIN)

答案 1 :(得分:0)

这是工作查询。不幸的是,加入并没有成功。

SELECT `project_id`
  FROM `projects`
WHERE `project_id`
  NOT IN (SELECT `project_id`
            FROM `offers`
          WHERE `user_id` = 'foo');

因此不需要连接 - 一个简单的子选择就可以了。