mysql - SQL选择基于多行键的两部分组合键的一半?

标签 mysql sql syntax sql-match-all

我有一个包含这样一个复合键的表:

========TABLE========
key_a_col | key_b_col

场景:

key_b 是 'foo',在 key_a 下有一个 'bar' 和 'baz' 条目。另一个 key_b 'fiz' 有 'bar' 和 'raz'。

像这样:

========TABLE========
key_a_col | key_b_col
    'bar' | 'foo'
    'baz' | 'foo'
    'bar' | 'fiz'
    'raz' | 'fiz'

我想选择在 key_a_col 中同时有“bar”和“baz”与之配对的所有 key_b 条目。所以 'foo' 会被返回(bar|foo 和 baz|foo 存在),而 'fiz' 不会(只有 fiz|bar 匹配)。

我怎样才能做到这一点?

最佳答案

ypercube 的链接应该给你一个想法,但如果你想更进一步到 N 个条件,你将必须进行 N 个连接。

这是另一种方法,您可以使用它来执行任意条件而无需连接。用你的 'biz' 和 'baz' 创建一个表 Conditions

SELECT DISTINCT col_b FROM Table t1 
       WHERE ( SELECT COUNT(*) FROM Table t2 
                INNER JOIN Condition c on t2.key_b = c.condition
                WHERE t1.key_a = t2.key_a 
                GROUP BY t1.key_a) =  
              (SELECT COUNT(*) FROM CONDITION)

关于mysql - SQL选择基于多行键的两部分组合键的一半?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10238721/

相关文章:

javascript - 赋值语法

PHP:使用单词 'and' 的语法是什么意思?

mysql - 在 MySQL 中的子查询上使用 GROUP_CONCAT

sql - 将大表导入azure sql数据库

Mysql:搜索子字符串并返回其右侧最大#的那个

mysql选择为重复列的第一行以外的所有内容返回空白

sql - 在新行中添加 max(value)+1,这会成为问题吗?

c++ - 如何在命名空间中使用 += 函数

MySQL,家庭传感器数据库结构

php - 升级 php 后 MySQL 无法在 mac Sierra 上运行