我有一个超类型表以及两个子子类型表和第三个普通表。我的问题涉及将普通表连接到其中一个子类型表而不包括中间supertypeTable。正如下面的CREATE语句所示,normalTable1的索引都与supertypeTable有关,而不是任何一个子类型表,但是,子类型表与超类型表具有相同的PK。我可以简单地执行SELECT whatever FROM subtypeTable1 AS s INNER JOIN normalTable1 AS n ON n.supertypeTable_id=s.supertypeTable_id...
,还是需要包含其他索引,还是在连接中包含supertypeTable?谢谢
supertypeTable
-id (PK)
-data
subtypeTable1
-supertypeTable_id (PK and also FK with a 1-to-1 relationship to supertypeTable.id)
-data
subtypeTable2
-supertypeTable_id (PK and also FK with a 1-to-1 relationship to supertypeTable.id)
-data
normalTable1
-id (PK)
-supertypeTable_id (FK with a many-to-one relationship to supertypeTable.id)
-data
CREATE normalTable1 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
supertypeTable_id INT UNSIGNED NOT NULL ,
data VARCHAR(45) NULL ,
PRIMARY KEY (id) ,
INDEX fk1 (supertypeTable_id ASC) ,
CONSTRAINT fk2
FOREIGN KEY (supertypeTable_id )
REFERENCES supertypeTabl (id )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ENGINE = InnoDB;
答案 0 :(得分:1)
只要密钥匹配,您就不需要在查询中包含不需要的中间表。您可以将普通表加入子类型表。 SQL(和关系)连接基于匹配值,而不是基于路径。
但是你的表结构有一些与这个问题无关的问题。请参阅this SO answer,仔细查看其中的“party_type”列。