SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test'
但是,我只有1条记录,其中slugs.name = 'test'
为真!当只有一条记录匹配WHERE子句时,JOIN返回多个结果?
这是怎么回事?
SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test'
但是,我只有1条记录,其中slugs.name = 'test'
为真!当只有一条记录匹配WHERE子句时,JOIN返回多个结果?
这是怎么回事?
其他人则指出你有什么错(你得到一个笛卡儿连接),但不知道如何解决它。我们需要知道images
中的行如何与slugs
中的行相关。比如说,如果有一个名为两个BingoID
列,应该匹配,则是这样的:
SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test' AND images.BingoID = slugs.BingoID
,或者
SELECT images.filename, slugs.name
FROM images inner join slugs
ON images.BingoID = slugs.BingoID
WHERE images.status = 1 AND slugs.name = 'test'
感谢您的简化:) – oaziz 2012-01-06 08:14:39
这是因为你有一个以上的images.status = 1
:)
您的查询匹配的所有从表images
有name = 'test'
有status = 1
包含所有行从表slugs
行。
这是正确的,但为什么slugs.name ='test'没有效果? – oaziz 2012-01-06 07:52:04
它有效果。尝试消除它。你应该把另一个条件与图像和slu relate相关。 – 2012-01-06 07:54:27
但你可能有两个image.status = 1。
他们的方式,你写它,它几乎是一个完全连接,笛卡尔乘法。
是的,slugs.name ='test'没有效果!这就是问题。 – oaziz 2012-01-06 07:52:43
它有一个很好的机会做一个隐式的自然连接,因为你从这样的两个表中选择。
图像和slu tables表如何相关?我认为你需要添加一个内部连接,因为你的查询将会返回尽可能多的名字为“test”的slu as作为图像表中的条目。
它使交叉连接和图像表将有多个行,然后创建一个新的表具有乘法no。这两个表的行由于这个查询给出了多个结果。
你应该尝试右外连接来获得一个结果试试这个
SELECT images.filename, slugs.name FROM images right outer join slugs
on images.ID = slugs.ID
where images.status = 1 AND slugs.name = 'test'
什么是你回来的结果? – Matthew 2012-01-06 07:48:46
带有images.status = 1的所有行。 – oaziz 2012-01-06 07:50:13
你有多少张images.status = 1?你没有明显地加入这两张桌子。 – 2012-01-06 07:50:58