2010-11-11 20 views
1

Essayer d'implémenter des associations polymorphes dans MySQL. Je pensais que le code pourrait ressembler à ceci:Rejoindre un CAS dans MySQL

SELECT 
... 
FROM 
resource 
LEFT JOIN (
    CASE resource.owner_type 
     WHEN 'meeting' THEN 
     (SELECT * FROM meeting) as owner 
     WHEN 'todo' THEN 
     (SELECT * FROM todo) as owner 
     END) 

Mais le CASE provoque une erreur de syntaxe. Comment cela peut-il être réécrit correctement?

+1

http connexes: // stackoverflow. com/questions/1255492/condition-joint-en-mysql –

+2

Un problème est de s'assurer que vous avez un ensemble cohérent de colonnes dans la sortie - vous ne pouvez pas avoir les lignes de réunion contenant un nombre différent de colonnes à partir des lignes todo. –

Répondre

0

Réponse courte est que vous ne pouvez pas remplacer des jointures sur une base ligne par ligne - mais je crois que c'est une solution à ce que vous essayez d'atteindre:

SELECT 
... 
FROM 
resource 
LEFT JOIN meeting ON resource.id=meeting.resource_id 
WHERE resource.owner_type='meeting' 
UNION 
SELECT 
... 
FROM 
resource 
LEFT JOIN todo ON resource.id=todo.resource_id 
WHERE resource.owner_type='todo'