gpt4 book ai didi

mysql - 如何强制查询仅获取选定的所有行的结果?

转载 作者:行者123 更新时间:2023-11-29 14:02:34 24 4
gpt4 key购买 nike

这是一个非常简单的问题,所以我希望你能帮助我。

我有两个具有以下结构的表:

-- -----------------------------------------------------
-- Table `mydb`.`product`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`products` (
`id_product` INT NOT NULL ,
`name` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id_product`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `mydb`.`features`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`features` (
`id_feature` INT NOT NULL ,
`id_product` INT NOT NULL ,
`description` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id_feature`) ,
INDEX `fk_table2_table1` (`id_product` ASC) ,
CONSTRAINT `fk_table2_table1`
FOREIGN KEY (`id_product` )
REFERENCES `mydb`.`products` (`id_product` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
<小时/>

此查询返回产品 5 的所有功能:

select descripcion from features where id_product = 5;

其中:

expensive
strong
tall

好的,现在我想获取仅具有所有这些功能的表“产品”的所有名称。我尝试过这样的事情:

select p.name from products p, features f
where p.id_product = f.id_product and
f.id_feature in
(select id_feature from features
where description in
(select description from features
where id_product = 5);

但它也给我返回了比我正在寻找的三个产品具有更少或更多功能的产品......

我希望我说得清楚。提前致谢。

最佳答案

我认为您正在寻找的是那些具有所有这三个功能且没有任何其他功能的产品。如果是这样,类似这样的事情应该有效:

SELECT P.Id_Product, P.Name
FROM Products P
JOIN Features F ON P.id_product = F.id_product
JOIN Features F2 ON P.id_product = F2.id_product
WHERE F.id_feature IN (SELECT id_feature FROM Features WHERE id_product = 5)
GROUP BY P.Id_Product, P.Name
HAVING COUNT(DISTINCT F2.id_Feature) = 3

这是一个浓缩的 Fiddle来演示。

关于mysql - 如何强制查询仅获取选定的所有行的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com