【问题标题】:SQL query for object with specific entries on a join table连接表上具有特定条目的对象的 SQL 查询
【发布时间】:2013-11-23 18:07:12
【问题描述】:

我有一个包含以下列的连接表:

target_id
assoc_id
int_attr

它们代表我的目标对象、它的关联对象以及描述关联的整数属性。

我得到一个散列,其中的键代表关联属性,值包含与该属性关联的 id。例如:

{
  1: [3, 5],
  2: [7, 9],
}

我正在尝试开发一个 SQL 查询,它可以找到所有具有适当连接表条目的 target_id。在上面的示例中,它将找到具有 4 个条目的任何目标对象:

`targets_assocs`
target_id assoc_id int_attr
X         3        1
X         5        1
X         7        2
X         9        2
A         3        1
A         5        1
A         7        2
A         9        2
C         2        1
C         4        1
C         6        2
C         8        2

在这种情况下,它将返回 X 和 A,忽略 C。

我试图使用某种类型的 HAVING 子句。我试图避免使用 IF EXISTS 有多个嵌套子查询。任何想法或建议将不胜感激。

【问题讨论】:

    标签: sql inner-join jointable


    【解决方案1】:

    我真的没有写过 MySQL 的请求,很抱歉有错别字。

    SELECT `target_id` FROM (
       SELECT `target_id`, count(*) FROM (
          SELECT `targets`.`target_id`, `targets_assocs`.`int_attr` FROM `targets`
           INNER JOIN `targets_assocs` ON `targets_assocs`.`target_id` = `targets`.`id`
           GROUP BY `targets`.`target_id`, `targets_assocs`.`int_attr`
       ) 
       GROUP BY `target_id`
       HAVING COUNT(*) = 2)
    

    【讨论】:

    • 感谢您的帮助,但我想也许我的问题措辞不佳,我更新了它以获得更多说明。
    • 再次感谢您的宝贵时间。通过将 WHERE 子句添加到最里面的 SELECT 语句,我能够在有限数量的 select 语句中完成我正在寻找的东西。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多