SQL加入超类型和子类型表

时间:2013-02-20 14:45:59

标签: mysql sql

我有一个超类型表以及两个子子类型表和第三个普通表。我的问题涉及将普通表连接到其中一个子类型表而不包括中间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;

1 个答案:

答案 0 :(得分:1)

只要密钥匹配,您就不需要在查询中包含不需要的中间表。您可以将普通表加入子类型表。 SQL(和关系)连接基于匹配值,而不是基于路径。

但是你的表结构有一些与这个问题无关的问题。请参阅this SO answer,仔细查看其中的“party_type”列。