select
*
from
product
where
product.id in (
select
`like`.product_id as id
from
`like`
where
`like`.user_id = 1
);
目的:获取某个用户点赞过的所有产品信息
join
的时候,什么条件应该写在 on
?哪些应该写在 where
?
下面是三个表的 DDL
信息:
CREATE TABLE `account` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `product` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`price` decimal(10,5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `like` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`product_id` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
还有就是我想问一下这种双 Select
的结构对应的是内外左右 join
的哪种呢?
select
*
from
product
join `like` on product.id = `like`.product_id
where
`like`.user_id = 1
这样是否完备?是否需要指定 join
的内外左右?
ON
或者WHERE
查出来的结果是一样的,而且MySQL引擎会对此做一定的优化,查询速度上也相差无几。但如果是左连接这种就不一样了,把条件写在ON
里边时,筛选条件就不会对左表起到筛选作用,但是可能会影响到联表后右表的一些值是否为NULL。INNER JOIN
;INNER JOIN
,这里可以不用再额外指定。