2013-01-17 63 views
1

我可以在2個查詢中執行以下操作,但希望更簡單一些。這可以結合在一個查詢中嗎?如果是的話,比兩個查詢更有效率嗎?一個查詢中的多個select語句

query1: SELECT page_id, coupon_id from table_1 WHERE key = :key 
query2: SELECT folder from table_2 WHERE page_id = table_1.page_id 

對於我的最終結果,我需要從table_1的coupon_id和從table_2的文件夾。

在QUERY2我需要使用從QUERY1的PAGE_ID結果得到的文件夾

有沒有一種簡單的方法來做到這一點?

+0

看爲連接。 – PeeHaa

回答

3

使用JOINLEFTRIGHTINNER達到你的需求):

SELECT 
    t1.page_id, 
    t1.coupon_id, 
    t2.folder 
FROM 
    table_1 AS t1 
    LEFT JOIN table_2 AS t2 ON 
     t2.page_id = t1.page_id 
WHERE 
    t1.key = :key 
+0

謝謝!按照我想要的方式工作。 –

2

您將要JOINpage_id表:

SELECT t1.page_id, 
    t1.coupon_id, 
    t2.folder 
from table_1 t1 
inner join table_2 t2 
    on t1.page_id = t2.page_id 
WHERE key = :key 

如果您需要幫助學習加入語法,這裏是一個偉大的visual explanation of joins

我使用了一個INNER JOIN,它將返回兩個表格之間匹配的所有行。如果你想從table_1 返回所有行,即使它不具有匹配的行table_2,那麼你可以使用一個LEFT JOIN

+0

+1,很好的解釋鏈接。 –

+0

謝謝,這是一個很好的閱讀。 –

+0

@SpencerTreeHouse當您試圖找出正確的連接時,它非常方便。 – Taryn

0
SELECT 
    table_1.coupon_id AS coupon_id, 
    table_2.folder AS folder 
FROM 
    table_1 
    INNER JOIN table_2 ON table_2.page_id = table_1.page_id 
WHERE 
    table_1.key = :key 
0
SELECT t1.page_id, t1.coupon_id, t2.folder 
FROM table_1 t1 LEFT JOIN table_2 t2 ON (t1.page_id = t2.page_id) 
WHERE t1.key = :key 

這將是快於兩個查詢,多少取決於在你的數據上。

0

試試這個請:

SELECT a.page_id, a.coupon_id, b.folder_id 
from table_1 a 
join table_2 b 
ON a.page_id = b.page_id 
WHERE a.key = :key 
group by a.page_id 
;