2012-04-11 75 views
4
SELECT * FROM `image_appreciations` 
WHERE `image_id` IN(SELECT `id` FROM `images` WHERE `user_id` = '1') 

是我目前的查询,返回结果为零子查询里面“IN”的条款

SELECT `id` FROM `images` WHERE `user_id` = '1' 

被周围的8号的子查询返回两个人在

SELECT * FROM `image_appreciations` 
WHERE `image_id` IN(77,89) 

,并发现这工作正常。但是它们一起失败了。我究竟做错了什么?

+0

你的语法看起来是正确的,我...这里是一个参考,虽然万一http://beginner-sql-tutorial.com/sql-subquery.htm – 2012-04-11 20:24:09

+1

检查,如果'ID没有NULL'在你的子查询 – 2012-04-11 20:25:19

+0

@rs:为什么会有所作为?如果'id'为NULL,那么该行将被忽略。 – 2012-04-11 20:28:41

回答

6

这可以通过使用JOIN来完成。下面是一个使用隐式短语句法的例子。

SELECT * FROM image_appreciations a, images i 
WHERE a.image_id = i.id AND i.user_id = 1 
+0

完美地工作。谢谢!将接受,当它也允许我:) – Harry 2012-04-11 20:27:38

+0

虽然认识到加入构建:从表1,表2不是今天使用的标准 – Leslie 2012-04-11 20:38:15

+2

@莱斯利今天使用的标准是什么? – Harry 2012-04-11 20:58:47

4

像这样的子查询“应该”工作,奇怪的是,它不是。无论如何,你可以尝试使用JOIN来解决这个问题。

SELECT * FROM `image_appreciations` 
JOIN `images` ON `image_id` = `id` 
WHERE `images`.`user_id` = '1'