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

在MYSQL[duplicate]中查询单个列中所有值都匹配的项

魏宸
2023-03-14

我试图获得一个所有项都匹配的表的结果,然后只显示它们在特定StockID中都匹配的结果。

我尝试在(4,1,8)中执行variantId作为示例,但它向我显示了所有结果,而不是所有结果都与4,1和8匹配的地方:

SELECT * FROM `products_bind_variant_stock_combination` 
WHERE `variantId` IN (4,1,8) 

我希望它返回变量Id匹配4,1和8的3个结果。或者我只想显示与所有ID匹配的股票ID。

我的结构在

products_bind_variant_stock_combination


|subId        |int(10)|No |
|productsId   |int(10)|Yes|NULL
|stockId      |int(10)|Yes|NULL
|variantId    |int(10)|No |

一个小样本是:

|1|69|1|4
|2|69|1|1
|3|69|1|8
|4|69|2|5
|5|69|2|1
|6|69|2|8
|7|69|3|6
|8|69|3|1
|9|69|3|8

搜索匹配4,1,8的variantId时,我想要的结果是:

|1|69|1|4
|2|69|1|1
|3|69|1|8

共有1个答案

阙项禹
2023-03-14

在派生表中,我们可以获得所有的stockid值,该值只有1,4,8variantid值。为此,我们可以在stockid分组,并在having子句中使用基于条件聚合的筛选。

现在,我们可以使用stockid连接回主表,并获取该stockid值的所有行。

SELECT
  t1.*
FROM products_bind_variant_stock_combination AS t1
JOIN (SELECT stockID
      FROM products_bind_variant_stock_combination
      GROUP BY stockID 
      HAVING SUM(variantId = 1) AND /* has variantId = 1 */
             SUM(variantId = 4) AND /* has variantId = 4 */
             SUM(variantId = 8) AND /* has variantId = 8 */
             NOT SUM(variantId NOT IN (1,4,8)) /* no other variantId exists */
     ) AS t2 ON t2.stockId = t1.stockID 

 类似资料:
  • 问题内容: 查看数据库时,对所有表(包括它们的行数)进行概述非常有用: information_schema数据库中的MySQL TABLES表提供了一个table_rows字段: 但是table_rows仅对某些数据库引擎有效,而对INNODB则为NULL或不准确。 因此,有必要组成一个对每个表执行显式SELECT Count(*)…的方法。 在关于stackoverflow的这个问题的许多重复

  • 对于多值字段,如下所示: 此查询返回我们在上面插入的文档: 有没有办法让弹性单独匹配列表中的每个项目?我想让文档匹配“银行”、“美国”、“银行”、“游戏”、“加拿大”,但不匹配“微软游戏” 我不想使用嵌套文档或脚本

  • 问题内容: 我有这个架构 样本数据 SQL Fiddle演示。我已经插入了一些示例数据。 查兰芝 我需要找到唱片标题的所有父母。如何仅通过一个查询就可以获取所有父母? 我的意思是我需要这个结果: 期望的输出 假设我想使用其所有父项来获取条目,并且要使用where条件,那么它应该获取上述记录。 问题答案: 演示版

  • 问题内容: 我可以在mysql数据库上打开审核日志记录吗? 我基本上想监视所有查询一个小时,并将日志转储到文件中。 问题答案: 使用–log选项启动mysql: 或在文件中放置以下内容: 任何一种都将所有查询记录到log_file_name。 您也可以使用选项代替来仅记录慢速查询。默认情况下,花费10秒或更长时间的查询被认为是缓慢的,您可以通过设置查询在记录之前必须执行的秒数来更改它。

  • 问题内容: 我们可以像这样在特定document.field中搜索所有单词: 这将搜索词,并在该领域,从而只返回这些文档将在所有这些词场。 但是我想做的却有些不同。 我想进行查找,以便如果该文档字段的所有单词都出现在我的搜索查询中,则它将返回该文档。 例如 假设Elasticsearch数据库中有一个文档 现在,如果我搜索“ a”,它将返回该文档,因为document.title中的所有单词确实存

  • 问题内容: 我需要一个activerecord查询来匹配params数组中的所有项目。 假设用户具有has_many个角色。每个角色都有一个名字 当我通过[‘演员’,’制作人’,’歌手’]时。我希望查询返回给我具有所有这三个角色或更多角色的用户。 但是我下面的方法实现将返回具有至少一个与传递的数组中的角色名称匹配的角色名称的用户 我当前的方法基于找到任何标签而不是“ MATCH ALL”来给出结果