2013-02-19 134 views
0

我已经经历了很多链接,但没有人能解决我的问题。所以,请不要说,虽然我曾经在MySql上工作过,但是没有遇到这种情况,我需要使用子查询。 所以,这里是我的疑问..Mysql子查询返回多行

"SELECT * FROM klms as Klm WHERE gcil_id = (SELECT id FROM gcils WHERE genre = 'Clothes')" 

很显然,我已经超过> 1行,其中流派=“衣服”,所以它会返回> 1点的行..但话,就说明这个错误

Error: SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row 

btw我为我的应用程序使用cakephp &我发现它更容易使用SQL查询。

回答

2

使用IN instaead的平等:

SELECT * 
FROM klms as Klm 
WHERE gcil_id IN (SELECT id FROM gcils WHERE genre = 'Clothes') 

或者你可以使用一个INNER JOIN

SELECT DISTINCT klm.* 
FROM klms as Klm 
    INNER JOIN gcils g ON Klm.gcil_id = gcils.id 
WHERE g.genre = 'Clothes' 
+0

我倾向于喜欢的第一个更好的。选择DISTINCT往往会导致代码重用性问题(根据我的经验),因为人们会复制粘贴查询而无法真正了解它的功能。 – Colton 2013-02-19 19:28:27

+0

@Sparksis - 只是希望包含OP的两个选项 - 根据gcils表中的数据,DISTINCT可能不是必需的。谢谢! – sgeddes 2013-02-19 19:30:07

+0

哪一个会更有效率? – user1984849 2013-02-19 19:59:32