【问题标题】:MySQL : How to filter query using "IN" on Composite Primary KeyMySQL:如何在复合主键上使用“IN”过滤查询
【发布时间】:2021-10-29 08:41:49
【问题描述】:

我在 MySQL 中有一个表,主键是这样的复合表:

+--------------+----+------------------------------+
| fk_something | id |            label             |
+--------------+----+------------------------------+
|            1 |  1 | First record of something 1  |
|            2 |  1 | First record of something 2  |
|            2 |  2 | Second record of something 2 |
|            1 |  2 | Second record of something 1 |
|            2 |  3 | Third record of something 2  |
+--------------+----+------------------------------+

但现在我有一个棘手的查询要做,我想使用“IN”过滤器检索例如 2-1 和 1-2 记录...我该怎么做?

我试过类似的东西:

SELECT * FROM my_table WHERE id IN (1, 2) AND fk_something IN (2, 1)

但它也给了我 1-1 和 2-2 记录...

【问题讨论】:

  • 好吧,您可以简单地添加另一个过滤器,例如AND id <> fk_something
  • @IVOGELOV 在这种情况下是的,你可以,但这不是最难查询的可行解决方案
  • @ÁlvaroGonzález 实际上我正在使用子查询来检索一些特定的 ID ......我可以准确地解释我想要实现的目标,但我想保持简单并理解跨度>
  • 我错了,(a, b) IN () 语法根本不需要子查询。查看您的第一个答案。

标签: mysql composite-primary-key


【解决方案1】:

您可以利用很少使用的 SQL 功能 row value expressions

SELECT * FROM myTable
WHERE (id, fk_something) IN (
(1, 2),
(2, 1),
(2, 3)
)

【讨论】:

  • MySQL supports it。太棒了,我不知道这种语法。
  • 哇???真的吗 ?我会立即检查,谢谢您的回答
  • 哇,这就是答案 :) 谢谢它运作良好
【解决方案2】:

我认为这可以帮助你

SELECT *
FROM my_table 
WHERE id IN (1, 2) 
AND fk_something IN (1, 2)
AND id != fk_something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多