mysql - 当我尝试仅从一个用户获取数据时,查询从两个不同用户获取数据

标签 mysql sql database mariadb

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

我有三个表:

/*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

这是我得到的结果:

Result

最佳答案

您将获得两行,因为这两个类别具有相同的 IDCategory 值,即您要 JOIN 的值。您还需要 JOIN FK_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

关于mysql - 当我尝试仅从一个用户获取数据时,查询从两个不同用户获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56388652/

相关文章:

php - 如果已发送表中不存在,则插入电子邮件

MySQL 查询 - 计算有多少用户注册了事件(男性和女性)

sql - MSSQL : given a table's object_id, 判断是否为空

php - MySQL 工作台与 phpMyAdmin

c++ - 我应该使用 shared_ptr 还是返回 unique_ptr.get()?

mysql - 尝试创建表时出错

php - MySQL 选择在同一语句中使用 LIKE 和 AND 不起作用

mysql - 如何确定表中多个项目的第一个实例

python - 从mysql数据库获取数据到python时如何编写检查空集的语句?

sql - 数据库的执行计划