Соединить таблицу с составным ключом дважды

Учитывая таблицу 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.value — это значение для id,x, а второе — для id,y.


person Chris Seymour    schedule 06.12.2012    source источник


Ответы (3)


Если я правильно понял, это то, что вы ищете:

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'
person Mahmoud Gamal    schedule 06.12.2012
comment
Я считаю, что всегда будет возвращать пустой набор результатов, кроме случая X = Y - person Malcolm O'Hare; 06.12.2012
comment
Отлично, это то, что я имел в виду! - person Chris Seymour; 06.12.2012
comment
Да, это канонический шаблон для одновременного запроса нескольких настраиваемых полей. - person hasienda; 08.12.2012

Возможно

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'
person Hamlet Hakobyan    schedule 06.12.2012
comment
Это будет отображать ticket_custom.value для id=$id,name='X' дважды, а не один раз для id=$id,name='X' и один раз для id=$id,name='Y'. - person Chris Seymour; 06.12.2012

Я это должен сделать трюк:

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')
person João Simões    schedule 06.12.2012