2013-12-14 114 views
0

例如我有數據庫,我有兩個表格QUESTIONS和ANSWERS。一個問題可以有多個答案,所以QUESTIONS表與ANSWERS表有一對多的關係。MySQL select,嵌入式光標

在Oracle中選擇一個問題,所有它的答案,我可以寫如下選擇:

select q.*, 
     cursor (select a.* 
       from ANSWRES a 
       where a.question_id = q.question_id) as answers 
from QUESTIONS q 
where q.question_id = 123; 

是否有可能寫MySQL數據庫類似的選擇?

如果沒有,那麼有兩種方法可以選擇其中一種方法,其中所有答案都使用一種選擇?

回答

2

你應該能夠做到這一點一join

select q.*, a.* 
from QUESTIONS q left outer join 
    ANSWERS a 
    on a.question_id = q.question_id 
where q.question_id = 123; 
+0

這將有助於在簡單的情況,但是當你有一些表格,它是在一個具有多個表的一對多的關係,那麼我認爲嵌入式遊標在這種情況下更清晰直觀的解決方案。 – Yoh0xFF

+1

@ Yoh0xFF。 。 。儘管我不同意你的看法(因爲'select'子句中的操作符影響了違反select的「意圖」的行數),更重要的問題是嵌入式遊標對於Oracle來說非常特殊,而這個答案是標準的SQL語法應該可以在任何SQL數據庫中工作。 –

+1

在普通SQL中,「具有多個詳細信息的主」查詢是一項挑戰。雖然您可以使用JOIN來獲取所有相關數據,但這並不理想,因爲各種細節表的行只與公共主人綁定,但彼此不相關,因此他們仍然形成笛卡爾積。這樣的查詢表現不佳(不僅僅在MySQL中),並且會由接收器處理會很痛苦。 您可以使用GROUP_CONCAT通過聚合來模擬「嵌入式遊標」。這會創建一個字符串列表,您可以在客戶端重新解析這些字符串,這可能不會那麼痛苦。 另一種可行的方法是發送... –