【问题标题】:Mysql select row based on multiple rows in same tableMysql根据同一张表中的多行选择行
【发布时间】:2013-05-14 15:27:11
【问题描述】:

我的表结构如下:

item_id |价值 | =================== 1 | 1 | 1 | 3 | 1 | 4 | 2 | 2 | 2 | 3 | 2 | 4 | 2 | 5 | 3 | 1 | 3 | 5 | 3 | 6 | 4 | 1 | 4 | 3 | 4 | 4 | 4 | 5 |

我有一个查询,它返回值与 1、3 和 4 匹配的那些 item_id。 所以这里应该返回的item_ids是1和4。

我的查询:

从表 t 中选择 item_id where exists (select item_id from table t1 where value = 1 and t1.item_id = t.item_id) 并且存在(从表 t1 中选择 item_id,其中 value = 2 和 t1.item_id = t.item_id)按 item_id 分组

此查询运行良好。这里我只匹配 3 个值。如果我想从表中匹配 50 个这样的值怎么办? (所有 50 个值都存储在一个 php 数组中)查询会很大,而且我想在同一个查询中从两个不同的表中做同样的事情。因此,这将使已经很庞大的查询的大小翻倍。请给我一些其他的建议。

已编辑::

表 2 -------- item_id |用户 ID | =================== 1 | 1 | 1 | 5 | 1 | 7 | 2 | 2 | 2 | 3 | 2 | 4 | 2 | 5 | 3 | 1 | 3 | 5 | 3 | 6 | 4 | 1 | 4 | 3 | 4 | 4 | 4 | 5 |

现在,我想要 item_id,其中 table1 的值为 1,3,4,table2 的 user_id 为 1,5,7

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    这个问题叫做Relational Division

    SELECT  item_ID
    FROM    tableName
    WHERE   value IN (1,3,4)
    GROUP   BY item_ID
    HAVING  COUNT(*) = 3
    

    如果没有对每个 item_id 的列 value 强制唯一性,则需要 DISTINCT 仅计算唯一值,

    SELECT  item_ID
    FROM    tableName
    WHERE   value IN (1,3,4)
    GROUP   BY item_ID
    HAVING  COUNT(DISTINCT value) = 3
    

    【讨论】:

    • 谢谢。这拯救了我的一天
    • +1.. 我最终得到了与 urs 相同的 having 查询......所以删除了 :)
    • 我之前提到过,我想在同一个查询中从两个不同的表中做同样的事情。我陷入了困境。我有另一个具有相同结构(item_id 和值)的表(table2)。现在我想要那些在 table1 中的值为 1,2,3 和来自 table2 的值为 3,4,5,7 的 item_ids
    • 你能举个例子吗,就像你在你的问题上发布的那样?所以简而言之,您想获取包含 1、2、3、4、5、7 的 item_id?还是什么?
    • 你能用你的样本记录更新你的问题吗?请:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2021-11-17
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多