【问题标题】:Join table with composite key twice使用复合键连接表两次
【发布时间】:2012-12-06 15:17:39
【问题描述】:

鉴于表ticket 具有主键id 和表ticket_custom 具有复合键ticket,name 我如何加入id = ticket and name=X and id = ticket and name=Y

ticket_custom 表允许对票证表进行扩展,它具有字段ticket,name,value

我可以进行一次连接:

SELECT id, summary, owner, ticket_custom.value
FROM ticket
INNER JOIN ticket_custom
ON id=ticket_custom.ticket AND ticket_custom.name='X'

我需要类似的东西:

SELECT id, summary, owner, ticket_custom.value, ticket_custom.value
FROM ticket
INNER JOIN ticket_custom
ON id=ticket_custom.ticket AND ticket_custom.name='X' AND ticket_custom.name='Y'

第一个ticket_custom.valueid,x 的值,第二个是id,y 的值。

【问题讨论】:

    标签: mysql sql database join trac


    【解决方案1】:

    如果我理解正确,这就是您要查找的内容:

    SELECT id, summary, owner, c1.value, c2.value
    FROM ticket t
    INNER JOIN ticket_custom c1  ON t.id = c1.ticket AND c1.name = 'X'
    INNER JOIN ticket_custom c2  ON t.id = c2.ticket AND c2.name = 'Y'
    

    【讨论】:

    • 我相信它总是会返回一个空的结果集,除非是 X = Y
    • 这就是我的意思!
    • 是的,这是一次查询多个自定义字段的规范模式。
    【解决方案2】:

    也许

    SELECT id, summary, owner, ticket_custom.value, ticket_custom.value
    FROM ticket
    INNER JOIN ticket_custom
    ON id=ticket_custom.ticket AND ticket_custom.name='X' 
        OR id=ticket_custom.ticket AND ticket_custom.name='Y'
    

    【讨论】:

    • 这将为id=$id,name='X' 显示两次ticket_custom.value,而不是为id=$id,name='X' 和一次id=$id,name='Y'
    【解决方案3】:

    我这应该可以解决问题:

    SELECT id, summary, owner, ticket_custom.value, ticket_custom.value
    FROM ticket
    INNER JOIN ticket_custom
    ON ticket.id=ticket_custom.ticket
    WHERE (ticket_custom.name='X' OR ticket_custom.name='Y')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多