2010-08-01 94 views
1

如果我运行此查询:问题:MySQL的子查询

SELECT `Manga`.`id`, `Manga`.`name` FROM `mangas` AS `Manga` WHERE `Manga`.`id` in 
(
SELECT `manga_id` FROM `mangas_genres` where `manga_id` = 1 
) 

我的计算机没有响应(我只是敲错)。它无法运行此查询。 上述代码无效吗?请帮帮我。

我认为它是有效的,但它不能运行。我不明白。它肯定是MySQL,我在MYSQL工作台上运行查询(不是在PHP中)我的电脑速度很慢(运行查询时) 我的表mangas和mangas_genres有超过5000行。

+1

喝多少应对的呢? – 2010-08-01 00:35:28

+0

'SELECT'manga_id'FROM'mangas_genres'其中'manga_id'= 1'将始终返回1或不返回任何内容。我猜这不是预期的结果。除非这是一些成语来代替'EXISTS'?你会得到什么错误? – 2010-08-01 00:46:01

回答

2

我的查询是有效的,但失去了许多时间来运行查询(> 100S我的电脑上,它会导致计算机变慢很(不响应)), 的解决是指数加快

2

这是一个有效的查询,假定所有表名和列名拼写正确。

 
CREATE TABLE mangas_genres (manga_id INT NOT NULL); 
INSERT INTO mangas_genres (manga_id) VALUES (1); 

CREATE TABLE mangas (id INT NOT NULL, name VARCHAR(100) NOT NULL); 
INSERT INTO mangas (id, name) VALUES 
(1, 'manga1'), 
(2, 'manga2'); 

SELECT `Manga`.`id`, `Manga`.`name` FROM `mangas` AS `Manga` WHERE `Manga`.`id` in 
(
SELECT `manga_id` FROM `mangas_genres` where `manga_id` = 1 
) 

结果:

 
id name 
1 manga1 

您的问题是其他地方。