Mysql子查询返回多行
问题描述:
我已经经历了很多链接,但没有人能解决我的问题。所以,请不要说,虽然我曾经在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查询。
答
使用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'
我倾向于喜欢的第一个更好的。选择DISTINCT往往会导致代码重用性问题(根据我的经验),因为人们会复制粘贴查询而无法真正了解它的功能。 – Colton 2013-02-19 19:28:27
@Sparksis - 只是希望包含OP的两个选项 - 根据gcils表中的数据,DISTINCT可能不是必需的。谢谢! – sgeddes 2013-02-19 19:30:07
哪一个会更有效率? – user1984849 2013-02-19 19:59:32