小编典典

在MySQL中设置交集:一种干净的方法

sql

我想获取满足我给它们的 所有n个约束的 实体。

或操作可以由UNION执行。我不会问这个问题,如果MySQL支持INTERSECT。

我在表 主题中 有实体,并且它们的属性在 subject_attribute 中。

我将AND操作视为 嵌套查询 的唯一方法:

SELECT id
FROM subject_attribute
WHERE attribute = 'des_sen'
AND numerical_value >= 2.0
AND id
IN (
   SELECT id
   FROM subject_attribute
   WHERE attribute = 'tough'
   AND numerical_value >= 3.5
)

这意味着:“获取满足最低查询条件的实体,然后消除满足较高查询条件的实体”,依此类推。


rows(condn x) AND rows(condn y) AND rows(cond z) <--ideal
rows(condn x:rows(cond y:rows(cond z))) <-- I am stuck here

我更喜欢线性地链接条件,而不是像我想的那样嵌套它们

  1. 以编程方式编写查询
  2. 更好地调试它们

我的问题: 给定 n个单独的查询 ,如何在MySQL中将它们整洁线性地相加?

不能通过使用嵌套查询或存储过程。

请注意有关单个查询的部分。


更新 :乔纳森·莱夫勒(Jonathan Leffler)回答正确。马克·班尼斯特(Mark
Ba​​nnister)的答案要简单得多(但我做了一些错误的决定)。如果您仍然对联接感到困惑,请参考我的回答。


阅读 228

收藏
2021-04-22

共1个答案

小编典典

假设每个单独的查询都在同一个表上运行,并且每个查询都访问的不同值attribute,则与所有此类查询相交的最简单方法是以下形式:

SELECT id
FROM subject_attribute
WHERE (attribute = 'des_sen' AND numerical_value >= 2.0) or
      (attribute = 'tough'   AND numerical_value >= 3.5) or
...
group by id
having count(distinct attribute) = N;

-其中N,attribute-numerical_value条件对的数量。

2021-04-22