Py学习  »  DATABASE

MySQL中的多态关系

Leon • 3 年前 • 1601 次点击  

第一个问题

我想在MySQL中建立一个多态关系。我以这篇文章为例: Creating a polymorphic association using MySQL Workbench

我的问题是,使用此解决方案,联接不起作用。有什么方法可以让加入工作吗?

那是我的尝试:

SELECT * FROM tblstall INNER JOIN tblstall ON tblstall.animal = tbldogs.ID;

错误消息是:

错误代码:1066。不是唯一的表/别名:“tblstall”0.000秒

第二个问题:

如何进行动态选择请求? 因此,当tblstall.animalType=2时,数据从tblDogs获取,而当tblsall.animalType=1时,数据则从tblHorses获取。

这是我当前的SELECT请求

SELECT * FROM tblstall, tbldogs WHERE tblstall.animalType = 2 AND tbldogs.ID = tblstall.animal;

已使用的数据库

这是我当前创建的数据库: This is my current DB i created:

以及SQL脚本

-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema test
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema test
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8 ;
USE `test` ;

-- -----------------------------------------------------
-- Table `test`.`tblDogs`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `test`.`tblDogs` (
  `ID` INT NOT NULL,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `test`.`tblHorses`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `test`.`tblHorses` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `test`.`tblStall`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `test`.`tblStall` (
  `ID` INT NOT NULL,
  `Sizes` VARCHAR(45) NULL,
  `animal` INT NOT NULL,
  `animalType` INT NOT NULL,
  PRIMARY KEY (`ID`),
  CONSTRAINT `fk_tblStall_tblDogs`
    FOREIGN KEY (`animal`)
    REFERENCES `test`.`tblDogs` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_tblStall_tblHorses1`
    FOREIGN KEY (`animal`)
    REFERENCES `test`.`tblHorses` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Ohh and Stall是德语中稳定的意思,如果这让人困惑的话。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/159353
文章 [ 1 ]  |  最新文章 3 年前