当前位置: 首页 > 知识库问答 >
问题:

涉及三个表的SQL“Not In”查询

逄宁
2023-03-14

我有三个表,product、category和product_to_category。Product具有主键product_id、category_id和PRODUCT_TO_CategoryP2C_ID。product_to_category使用产品各自的ID以多对多的关系将产品链接到类别。

基本上,我想写一个查询,从类别表中不存在的类别中选择所有产品。这是由于产品正在从另一个数据库迁移。

我有这样的东西,但有点迷路。

SELECT * 
FROM product AS p 
LEFT JOIN product_to_category AS p2c ON p.product_id = p2c.product_id 
LEFT JOIN category AS c ON c.category_id 

基本上这就是我所得到的。我需要将category表连接到product_to_category表,其中product_to_category category_id不在category表中。我可能完全在错误的道路上,但被卡住了!提前道谢。

共有2个答案

吴浩博
2023-03-14

如果你正在寻找不存在类别的产品,我建议

Select p.*,p2c.category_id
  from product p
  join product_to_category p2c
    on p.product_id=p2c.product_id
  left outer join category c
    on p2c.category_id=c.category_id
where c.category_id is null
长孙鸿波
2023-03-14

假设:一个产品可以是存在的类别的一部分,也可以是不存在的类别的一部分,或者根本没有类别。您没有要求任何类别的产品,因此从product到procduct_to_category的左侧第一个连接应该是内部连接。

注意:我对mysql很生疏,所以我使用SQL SERVER语法。我忘记了mysql是有ON子句还是使用where子句来连接。如果不支持ON子句,请将它们更改为WHERE子句。

有两种常见的方法:外部联接或NOT IN子句(或NOT EXISTS子句,其性能通常与NOT IN子句相同)

>

  • 外部联接

    选择p.*,P2C.category_id

    来自产品p

    内部连接product_to_category p2c(位于p.PRODUCT_ID=p2c.PRODUCT_ID)

    左联接P2C.category_id=c.category_id上的类别c

    其中c.category_id为NULL

    null的测试将找到不匹配的记录。

    >

  • 不在子句中

    选择p.*,P2C.category_id

    来自产品p

    内部连接product_to_category p2c(位于p.PRODUCT_ID=p2c.PRODUCT_ID)

    其中P2C.category_id不在(从类别c中选择c.category_id)

  •  类似资料:
    • 请问ruby中如何获取到一条sql中涉及到的所有表 比如sql是 select * from users 结果是 users 简单的用正则可以匹配,但是复杂的好像匹配不了 在mysql层面有啥语句会查询得到吗 看了explain,里面好像没有列举出涉及到的表名

    • 假设类“X”映射到表“X”,类“A”映射到表“A”,类“B”映射到表“B”。 表X结构:(X\u ID,其他一些列表A结构:(A\u ID,X\u ID,其他一些列)表B结构:(A\u ID,其他一些列)。。。表B也有一个\u Id “B”类扩展了“A”类。我们将它们的映射文件都设置为: “A”类父映射文件: “B”类映射文件: 现在,我有一个SQL查询,如下所示,我需要使用Hibernate标准

    • 智能机器人可以做到的事情可以很复杂:文字、语音、视频识别与合成;自然语言理解、人机对话;以及驱动硬件设备形成的“机器”人。作为一个只有技术和时间而没有金钱的IT人士,我仅做自然语言和人工智能相关的内容,不涉及硬件,也不涉及不擅长的多媒体识别和合成。所以索性就做一个可以和你说话,帮你解决问题的聊天机器人吧。 聊天机器人涉及到的知识主要是自然语言处理,当然这包括了:语言分析和理解、语言生成、机器学习、

    • 大家好,请看我的问题: 现有微服务A、微服务B,两个服务链接的是不同的数据库而且不在同一个机器上。 微服务A中的数据库人员表(base_user)存放了一万条人员信息,微服务B中需要调用A的接口,将没有调入过的人员列表查询出来(然后在前端勾选后调入到B的sys_user表中)。 我的实现方式是: 首先从B的sys_user中查询出所有的人员id列表,然后通过该id列表调用A的接口,A的接口执行my

    • 我的Sql查询不正确。我想创建一个查询,搜索前三个字符等于给定参数的公司 我的错误:

    • 问题内容: 假设我有一个简化的Organization文档,其中包含嵌套的发布值,例如(ES 2.3): 我想查找所有发布日期为dateCreated <组织的dateUpdated的组织: 我的问题是,当我执行嵌套查询时,该嵌套查询无权访问根文档值,因此无效并且获得0次匹配。 有没有一种方法可以将值传递给嵌套查询?还是我的嵌套方法完全不在这里?如果有必要,我想避免为出版物创建单独的文档。 谢谢。