使用AND和OR通过查询检索多行

鲁本

我想使用相同的ID检索多行。因此,具有该表“ component_property”,我希望根据我的SQL查询(结果如下)检查结果为2条记录,ID为:8和9,但是当然不检索任何内容,因为我正在检查是否cp.property_id = 9102及以后并检查是否cp.property_id = 8801同时这是不可能的。

ID;type_id;name;desc;property_id,value
--------------------------------------
8;3832;"amplifier1";"";8801;"3"
8;3832;"amplifier1";"";9102;"4015"
9;3832;"amplifier2";"";8801;"3"
9;3832;"amplifier2";"";9102;"4016"

这是我目前没有任何查询的查询。

SELECT c.id, c.type_id, cp.property_id, cp.value 
FROM components_component AS c 
INNER JOIN components_componentproperty AS cp 
ON c.id = cp.component_id 
WHERE 
(cp.property_id = 9102  AND cp.value IN ('4015', '4016')) 
OR
(cp.property_id = 8801  AND cp.value = '3') 
AND c.type_id = 3832

组件===> component_property <===属性

零件

id serial NOT NULL,
type_id integer NOT NULL,
name character varying(50) NOT NULL,
description character varying(255),

component_property

id serial NOT NULL,
component_id integer NOT NULL,
property_id integer NOT NULL,
value character varying(255),

财产

id serial NOT NULL,
code character varying(10),
preferred_name character varying(50),

我的预期结果将是:

id;name
-------
8;amplifier1
9;amplifier2
欧文·布兰德斯特(Erwin Brandstetter)

这是关系划分的一种情况:

SELECT c.id, c.name
FROM   components_componentproperty cp1
JOIN   components_componentproperty cp2 USING (component_id)
JOIN   components_component         c   ON c.id = cp1.component_id
WHERE  cp1.property_id = 9102  AND cp1.value IN ('4015', '4016')
AND    cp2.property_id = 8801  AND cp2.value = '3'
AND    c.type_id = 3832
GROUP  BY c.id;

我们在这里组装了一系列相关技术:

检查大量属性

您可以扩展上面的查询,并获得完整的属性,这将是最快的解决方案之一。对于更大的数字,走这条路线会更方便(并且也开始更快):

5个属性的示例,根据需要扩展:

SELECT c.id, c.name
FROM  (
   SELECT id
   FROM  (
      SELECT component_id AS id, property_id  -- alias id just to shorten syntax
      FROM   components_componentproperty
      WHERE  property_id IN (9102, 8801, 1234, 5678, 9876)  -- expand as needed
      GROUP  BY 1,2
      ) cp1
   GROUP  BY 1
   HAVING count(*) = 5  -- match IN expression
   ) cp2
JOIN   components_component c USING (id);

内部子查询的额外步骤cp1仅是必需的,因为每个(component_id, property_id)in中显然有多个条目components_componentproperty我们可以折叠cp1cp2成一个,并检查

HAVING count(DISTINCT property_id) = 5

但是我希望这样做会更昂贵,因为每行count(DISTINCT col)需要一种排序操作

对于很长的列表,这IN是一个不好的选择。考虑:

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

App-Inventor 2和通过单个查询导入多行

来自分类Dev

使用'predictTimeSeries'通过DMX查询检索SSAS历史数据

来自分类Dev

通过th:each和Twitter Bootstrap并使用多行

来自分类Dev

无法在 Firestore 查询中使用 whereLessThan() 和 whereGreaterThan() 检索数据

来自分类Dev

Firebase通过使用orderByKey()和equalTo()检索数据

来自分类Dev

使用线程通过相同的结构传递数据和检索数据

来自分类Dev

通过使用SendMessage API检索ComboBox计数和项目

来自分类Dev

使用 JavaScript 和 UIWebView 通过 ID-SWIFT 检索元素

来自分类Dev

在SQL中使用Pivot动态检索多行

来自分类Dev

使用嵌套的SELECT检索多行总是返回ORA-01427(子查询返回多个行)错误或缺少元素错误

来自分类Dev

无法通过查询对象检索值

来自分类Dev

Liferay-通过直接查询检索数据

来自分类Dev

如何通过 SQL 查询检索此架构?

来自分类Dev

存储和检索数据,通过使用节点上的获取通过REST实现到mongodb

来自分类Dev

查询多行的成本乘以数量和总和

来自分类Dev

使用NSArray从Parse检索查询

来自分类Dev

无法使用解析检索查询

来自分类Dev

如何在单个查询中使用联接和聚合函数更新表中的多行

来自分类Dev

在Symfony 1.4和Doctrine中使用一个查询插入多行

来自分类Dev

如何在单个查询中使用联接和聚合函数更新表中的多行

来自分类Dev

在Symfony 1.4和Doctrine中使用一个查询插入多行

来自分类Dev

通过getchar和putchar打印多行

来自分类Dev

通过REST API使用密码查询删除节点和关系

来自分类Dev

如何在python字典中存储和检索多行值

来自分类Dev

使用 `{` 和 `}` 语法的 Bash 多行

来自分类Dev

从本机查询和转换中检索数据

来自分类Dev

如何使用lxml和XPATH在单个查询中检索所有子节点

来自分类Dev

MySQL的 - 我可以将标签添加到表和使用SQL查询检索

来自分类Dev

尝试使用自定义字段和媒体查询检索post_type

Related 相关文章

  1. 1

    App-Inventor 2和通过单个查询导入多行

  2. 2

    使用'predictTimeSeries'通过DMX查询检索SSAS历史数据

  3. 3

    通过th:each和Twitter Bootstrap并使用多行

  4. 4

    无法在 Firestore 查询中使用 whereLessThan() 和 whereGreaterThan() 检索数据

  5. 5

    Firebase通过使用orderByKey()和equalTo()检索数据

  6. 6

    使用线程通过相同的结构传递数据和检索数据

  7. 7

    通过使用SendMessage API检索ComboBox计数和项目

  8. 8

    使用 JavaScript 和 UIWebView 通过 ID-SWIFT 检索元素

  9. 9

    在SQL中使用Pivot动态检索多行

  10. 10

    使用嵌套的SELECT检索多行总是返回ORA-01427(子查询返回多个行)错误或缺少元素错误

  11. 11

    无法通过查询对象检索值

  12. 12

    Liferay-通过直接查询检索数据

  13. 13

    如何通过 SQL 查询检索此架构?

  14. 14

    存储和检索数据,通过使用节点上的获取通过REST实现到mongodb

  15. 15

    查询多行的成本乘以数量和总和

  16. 16

    使用NSArray从Parse检索查询

  17. 17

    无法使用解析检索查询

  18. 18

    如何在单个查询中使用联接和聚合函数更新表中的多行

  19. 19

    在Symfony 1.4和Doctrine中使用一个查询插入多行

  20. 20

    如何在单个查询中使用联接和聚合函数更新表中的多行

  21. 21

    在Symfony 1.4和Doctrine中使用一个查询插入多行

  22. 22

    通过getchar和putchar打印多行

  23. 23

    通过REST API使用密码查询删除节点和关系

  24. 24

    如何在python字典中存储和检索多行值

  25. 25

    使用 `{` 和 `}` 语法的 Bash 多行

  26. 26

    从本机查询和转换中检索数据

  27. 27

    如何使用lxml和XPATH在单个查询中检索所有子节点

  28. 28

    MySQL的 - 我可以将标签添加到表和使用SQL查询检索

  29. 29

    尝试使用自定义字段和媒体查询检索post_type

热门标签

归档