0

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

1 回答 1

1

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

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

于 2013-02-20T15:03:10.263 回答