SQL 使用任何带外键的命令查询返回重复项
SQL Query returning duplicate with any command with foreign keys
其他答案似乎在使用 JOIN,如果我错了请纠正我,如果您有外键就不需要使用?如果您确实需要使用 JOIN,您介意展示一下它的作用吗?
CREATE TABLE Dogs (
DogID int NOT NULL,
DogSize int NOT NULL,
fName VARCHAR(255),
ID int,
PRIMARY KEY (DogID),
CREATE TABLE Owners (
ID int NOT NULL,
Fname VARCHAR(255) NOT NULL,
Lname VARCHAR(255),
Area VARCHAR(255) NOT NULL,
Pay INT NOT NULL,
Extra INT,
PRIMARY KEY (ID)
FOREIGN KEY (ID) REFERENCES Owners(ID)
foreign key
只是为了确保您的数据是 well-organized。在进行查询时,它不会帮助您“在幕后”。不使用连接肯定不好。
您的查询是一个 old-style 查询,出于多种原因您不应该使用它。等同于你写的内容如下:
SELECT * FROM Dogs CROSS JOIN Owners
这称为笛卡尔积,这意味着返回所有组合,因为您没有提供 join condition
。我假设你没有,因为你认为它会由外键自动提供......但它不是那样工作的。你必须自己提供你想要的。
现在开始下一个问题。你真的没有联系。 Owners 上的 foreign key
不仅针对 table 本身,而且实际上针对列本身。那是零意义。您可能想为每位主人分配一只狗吗? Owners
上应该有 另一个 列(不是 primary key
列),它是 Dogs
:
的外键
[DogID] int,FOREIGN KEY (DogID) REFERENCES Dogs(ID)
这样更好。仍然不是很好;它会将每个主人拥有的狗限制为一只或零只。一个更好的主意是在 Dogs 中创建一个新列来引用所有者:
[OwnerID] int,FOREIGN KEY (OwnerID) REFERENCES Owners(ID)
其他答案似乎在使用 JOIN,如果我错了请纠正我,如果您有外键就不需要使用?如果您确实需要使用 JOIN,您介意展示一下它的作用吗?
CREATE TABLE Dogs (
DogID int NOT NULL,
DogSize int NOT NULL,
fName VARCHAR(255),
ID int,
PRIMARY KEY (DogID),
CREATE TABLE Owners (
ID int NOT NULL,
Fname VARCHAR(255) NOT NULL,
Lname VARCHAR(255),
Area VARCHAR(255) NOT NULL,
Pay INT NOT NULL,
Extra INT,
PRIMARY KEY (ID)
FOREIGN KEY (ID) REFERENCES Owners(ID)
foreign key
只是为了确保您的数据是 well-organized。在进行查询时,它不会帮助您“在幕后”。不使用连接肯定不好。
您的查询是一个 old-style 查询,出于多种原因您不应该使用它。等同于你写的内容如下:
SELECT * FROM Dogs CROSS JOIN Owners
这称为笛卡尔积,这意味着返回所有组合,因为您没有提供 join condition
。我假设你没有,因为你认为它会由外键自动提供......但它不是那样工作的。你必须自己提供你想要的。
现在开始下一个问题。你真的没有联系。 Owners 上的 foreign key
不仅针对 table 本身,而且实际上针对列本身。那是零意义。您可能想为每位主人分配一只狗吗? Owners
上应该有 另一个 列(不是 primary key
列),它是 Dogs
:
[DogID] int,FOREIGN KEY (DogID) REFERENCES Dogs(ID)
这样更好。仍然不是很好;它会将每个主人拥有的狗限制为一只或零只。一个更好的主意是在 Dogs 中创建一个新列来引用所有者:
[OwnerID] int,FOREIGN KEY (OwnerID) REFERENCES Owners(ID)