如何选择在另一个表中具有全部或没有对应值的行?

亚历克斯·布莱克曼

我不确定我的措词是否正确,请随时纠正我。以下是表格及其数据:

product        category                 category_product
-------        --------                 ----------------
id_product     id_category  active      id_category  id_product
1              1            1           1            1
2              2            1           2            1
3              3            0           1            2
               4            0           2            2
                                        3            2
                                        3            3
                                        4            3

我只需要选择所有类别都处于非活动状态的那些产品例如:

  • 产品1是好的,因为它属于积极类别(12)。
  • 产品2是好产品,因为它至少有一个有效的类别(123-无效)
  • 3必须选择产品,因为其所有类别均处于非活动状态(34)。

我有以下查询,这显然是不正确的,因为它选择了两个产品:23

SELECT p.id_product
FROM product p
JOIN category_product cp
  ON p.id_product = cp.id_product
JOIN category c
  ON c.id_category = cp.id_category
WHERE
  c.active = 0;

这是SQL Fiddle:http://sqlfiddle.com/#!2 / 909dd / 2/0

我该如何解决?

草莓

考虑以下:

SELECT p.* 
     , COUNT(*)
     , SUM(c.active = 1) active
     , SUM(c.active = 0) inactive
  FROM product p
  JOIN category_product cp 
    ON cp.id_product = p.id_product
  JOIN category c
    ON c.id_category = cp.id_category
 GROUP
    BY p.id_product;

+------------+----------+--------+----------+
| id_product | COUNT(*) | active | inactive |
+------------+----------+--------+----------+
|          1 |        2 |      2 |        0 |
|          2 |        3 |      2 |        1 |
|          3 |        2 |      0 |        2 |
+------------+----------+--------+----------+

http://sqlfiddle.com/#!2/909dd/55

这个问题的最后一部分留给读者练习

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Excel中查找在另一个工作表中没有对应行的行

来自分类Dev

如何选择一个表中存在但另一个表中没有的值?

来自分类Dev

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

来自分类Dev

如何从表中选择数据,在该表中我需要返回在一个字段中具有重复值而在另一个字段中具有指定值的行?

来自分类Dev

连接两个表,向我显示一个表中的记录,而另一个表中没有对应的值

来自分类Dev

如何从一个表(具有两列的唯一组合)中选择所有SQL行,而另一个表中没有相同的组合

来自分类Dev

如何获取在另一个表的列值中没有该列值的行

来自分类Dev

MySql根据另一个表中的MAX值选择一个表中的所有行

来自分类Dev

如何根据另一个表中的最新结果选择没有重复的结果?

来自分类Dev

如何从一个表中选择另一个表中没有外键的记录

来自分类Dev

如何将列中具有特定值的行复制到另一个工作表?

来自分类Dev

如果另一个单元格具有特定值,如何制作一个按钮,该按钮仅将值从一个表发送到另一个表中的行

来自分类Dev

如何通过查询另一个表中的数据选择一个表中的所有行

来自分类Dev

如何从另一个具有最小值的表中更新列?

来自分类Dev

如何在另一个表ssms中更新具有相同值的列?

来自分类Dev

从一个查询使用ID值,到另一个表中具有相同ID的对应列

来自分类Dev

查询表中具有一个值但没有另一个值的所有唯一组合

来自分类Dev

如何对一个ID字段进行分组并选择另一个字段中具有最高值的行PostgreSQL

来自分类Dev

选择分钟 具有JOIN的另一个表中记录的三个值

来自分类Dev

SQL:在某些列中选择具有值的行,并且该值不包含在另一个表中

来自分类Dev

如何在SQL中的另一个表中选择与另一个值相对应的每个值

来自分类Dev

从另一个表中选择具有总和值的查询

来自分类Dev

如果另一个表中没有数据,如何从表中进行选择

来自分类Dev

如何使用SQL将具有不同选择条件的多列插入到另一个表中

来自分类Dev

从一个表中选择记录,而另一个表中没有两列

来自分类Dev

在另一个表中检索具有2个以上关联的行

来自分类Dev

根据行中的另一个变量删除具有相同值的行

来自分类Dev

如何添加具有引用laravel中另一个表的外键值的表?

来自分类Dev

从另一个表中添加具有初始值的列

Related 相关文章

  1. 1

    在Excel中查找在另一个工作表中没有对应行的行

  2. 2

    如何选择一个表中存在但另一个表中没有的值?

  3. 3

    从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

  4. 4

    如何从表中选择数据,在该表中我需要返回在一个字段中具有重复值而在另一个字段中具有指定值的行?

  5. 5

    连接两个表,向我显示一个表中的记录,而另一个表中没有对应的值

  6. 6

    如何从一个表(具有两列的唯一组合)中选择所有SQL行,而另一个表中没有相同的组合

  7. 7

    如何获取在另一个表的列值中没有该列值的行

  8. 8

    MySql根据另一个表中的MAX值选择一个表中的所有行

  9. 9

    如何根据另一个表中的最新结果选择没有重复的结果?

  10. 10

    如何从一个表中选择另一个表中没有外键的记录

  11. 11

    如何将列中具有特定值的行复制到另一个工作表?

  12. 12

    如果另一个单元格具有特定值,如何制作一个按钮,该按钮仅将值从一个表发送到另一个表中的行

  13. 13

    如何通过查询另一个表中的数据选择一个表中的所有行

  14. 14

    如何从另一个具有最小值的表中更新列?

  15. 15

    如何在另一个表ssms中更新具有相同值的列?

  16. 16

    从一个查询使用ID值,到另一个表中具有相同ID的对应列

  17. 17

    查询表中具有一个值但没有另一个值的所有唯一组合

  18. 18

    如何对一个ID字段进行分组并选择另一个字段中具有最高值的行PostgreSQL

  19. 19

    选择分钟 具有JOIN的另一个表中记录的三个值

  20. 20

    SQL:在某些列中选择具有值的行,并且该值不包含在另一个表中

  21. 21

    如何在SQL中的另一个表中选择与另一个值相对应的每个值

  22. 22

    从另一个表中选择具有总和值的查询

  23. 23

    如果另一个表中没有数据,如何从表中进行选择

  24. 24

    如何使用SQL将具有不同选择条件的多列插入到另一个表中

  25. 25

    从一个表中选择记录,而另一个表中没有两列

  26. 26

    在另一个表中检索具有2个以上关联的行

  27. 27

    根据行中的另一个变量删除具有相同值的行

  28. 28

    如何添加具有引用laravel中另一个表的外键值的表?

  29. 29

    从另一个表中添加具有初始值的列

热门标签

归档