0

我只想从一个特定用户那里获取数据,但我从两个用户那里获取数据。这是为什么?我不明白。我该如何解决这个问题?

我有三张桌子:

/*User*/

    CREATE TABLE `User` (
    `IDUser` INT NOT NULL AUTO_INCREMENT,
    `Name` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`IDUser`)
);

/*Category*/

     CREATE TABLE `Category` (
      `IDCategory` CHAR(3) NOT NULL,
      `FK_User` INT NOT NULL,
      `CategoryName` VARCHAR(40) NOT NULL,
      PRIMARY KEY (`IDCategory`, `FK_User`)
    );

/*Product*/

    CREATE TABLE `Product` (
        `IDProduct` VARCHAR(18) NOT NULL,
        `FK_User` INT NOT NULL,
        `ProductName` VARCHAR(150) NOT NULL,
        `FK_Category` CHAR(3) NOT NULL,
        PRIMARY KEY (`IDProduct`, `FK_User`)
    );

ALTER TABLE `Product` ADD FOREIGN KEY (`FK_User`) REFERENCES `User`(`IDUser`);
ALTER TABLE `Product` ADD FOREIGN KEY (`FK_Category`) REFERENCES `Category`(`IDCategory`);
ALTER TABLE `Category` ADD FOREIGN KEY (`FK_User`) REFERENCES `User`(`IDUser`);

insert into User(Name) values('User1');
insert into User(Name) values('User2');

insert into Category(IDCategory,FK_User,CategoryName) values('CT1',1,'Category1User1');
insert into Category(IDCategory,FK_User,CategoryName) values('CT1',2,'Category1User2');

如果两个不同的用户同时插入具有相同 ID 的相同产品:

insert into Product values('001',1,'shoe','CT1');
insert into Product values('001',2,'shoe','CT1');

如果我尝试这样的查询,为什么我会不断从两个用户那里获取数据:

SELECT P.IDProduct,P.ProductName,P.FK_Category,C.CategoryName 
FROM Product P inner join Category C on P.FK_Category=C.IDCategory 
WHERE P.FK_User=1

这是我得到的结果:

结果

4

3 回答 3

1

您将获得两行,因为这两个类别具有相同IDCategory的值,即您正在使用的值JOIN。您还需要JOINFK_User值上,这样您就不会获得User2的类别值:

SELECT P.IDProduct,P.ProductName,P.FK_Category,C.CategoryName 
FROM Product P 
INNER JOIN Category C ON P.FK_Category=C.IDCategory AND P.FK_User = C.FK_User
WHERE P.FK_User=1
于 2019-05-31T04:31:55.683 回答
1

您需要p.FK_User=C.Fk_User在联接子句中添加此条件

SELECT P.IDProduct,P.ProductName,P.FK_Category,C.CategoryName 
FROM Product P inner join Category C 
on P.FK_Category=C.IDCategory and p.FK_User=C.Fk_User
WHERE P.FK_User=1
于 2019-05-31T04:32:00.470 回答
0

APRIMARY KEY是一把UNIQUE钥匙。不应该CategoryID是独一无二的吗?也就是说,不Category应该PRIMARY KEY(CategoryId)吗?

(检查其他表是否存在类似问题。)

于 2019-06-01T05:10:37.503 回答