2013-02-19 132 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