SELECT images.filename, slugs.name FROM images, slugs
WHERE images.status = 1 AND slugs.name = 'test'
但是,我只有1条记录slugs.name = 'test'
为真!
发生了什么事?
答案 0 :(得分:7)
其他人指出你有什么不对(你正在获得笛卡尔联盟),但不是如何解决它。我们需要知道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'
答案 1 :(得分:2)
但你可能有两张images.status = 1 你写它的方式,它几乎是一个完整的连接,一个笛卡尔乘法。
答案 2 :(得分:2)
图像和slugs表如何相关?我认为你需要添加一个内连接,因为你的查询将返回尽可能多的名为“test”的slugs作为images表中的条目。
答案 3 :(得分:1)
这是因为您有多个images.status = 1
:)
您的查询匹配来自images
的表status = 1
的所有行,而slugs
表中的所有行都有name = 'test'
。
答案 4 :(得分:1)
很有可能它正在进行隐式自然连接,因为你从两个表中选择。
答案 5 :(得分:1)
它使交叉连接和图像表有多行,然后创建一个新的表,其中行乘以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'