mysql - SQL - 选择其中参数 A 是多个值之一且参数 B 相等

标签 mysql sql select

假设我们有一个包含 A 列和 B 列的表格。

我需要选择行,其中参数 A 是设置的 ARRAY 值之一,并且这些行的参数 B 相等,而没有其他行的参数 A 不在 ARRAY 中,但它的行相等参数 B 到 ARRAY 中的参数。

例如我们有表:

John    1
Andrew  1
John    2
Paul    2
John    3
Andrew  3
Paul    3

并且我需要根据 ARRAY = (John, Andrew) 选择行,所以结果应该只有前两行(参数 A 都在 ARRAY 中,参数 B 相等并且没有其他行具有相同的参数 B ):

John    1
Andrew  1

你能帮我解决那个 (MySQL) 的 SQL SELECT 语法吗?

PS:ARRAY 中的参数数量可以变化。

PS2:结果应该只有行,其中存在 ARRAY 中的每个项目。因此,例如,如果 ARRAY = (John, Andrew, Paul),结果应该仅为:

John    3
Andrew  3
Paul    3

最佳答案

SELECT *
FROM YourTable
WHERE a IN ('John', 'Andrew', 'Paul')
AND b NOT IN (
    SELECT b
    FROM YourTable
    WHERE a NOT IN ('John', 'Andrew', 'Paul')
) AND b IN (
    SELECT b
    FROM YourTable
    WHERE a IN ('John', 'Andrew', 'Paul')
    GROUP BY b
    HAVING COUNT(*) = 3)

COUNT(*) 限定符应与集合中的元素数相同。这假设名称在特定的 b 值中不重复。

DEMO

这实际上是将您的描述逐字翻译成 SQL。

关于mysql - SQL - 选择其中参数 A 是多个值之一且参数 B 相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246066/

相关文章:

mysql - MySql 中 case 条件的内连接表

php - 如何在php函数中使用表单值?

sql - 如何将 float32 数组从 gorm 保存为 double

mysql - SQL - ',' 附近的语法错误

c# - 修复 Angular 6 项目中的显示表

sql - Coalesce 是 ANSI SQL 的函数吗

mysql - 优化联合和公共(public)条件的查询

javascript - 无法在选择输入类型的下拉列表中设置可见选项的限制

angular - 测试 Angular2/Jasmine 中的选择输入更改

sql - 如何选择 COUNT DISTINCT 为 MAX 的行?