2013-11-21 125 views

回答

0
SELECT * 
FROM table1 
UNION 
SELECT * 
FROM table2 
UNION 
SELECT * 
FROM table3 
ORDER BY id ASC 

您最好指定您需要的列,而不是使用*來減少所需的內存。

+0

我可以這樣做:「SELECT COUNT('id')FROM'table1' UNION SELECT COUNT('id')FROM'table2' UNION SELECT COUNT('id')FROM'table3' UNION SELECT COUNT('id')FROM 'table4' UNION SELECT COUNT('id')FROM'table5'「? –

+0

是的,你應該可以做到這一點。這可能會耗費您的桌子的大小。你還會得到5個單獨的行,不是一個總和。 –

+0

您可能還想列出您的專欄名稱:count(id)as total –

7

你可以像下面這樣做

SELECT * FROM (
       SELECT * FROM table1 
       UNION ALL 
       SELECT * FROM table2 
       UNION ALL 
       SELECT * FROM table3 
) as l 
ORDER BY id ASC LIMIT 50 

當你在每個表列數相同的聯盟將只工作

+0

您是否嘗試過?它顯示錯誤消息:錯誤代碼:1248.每個派生表必須有自己的別名\t 0.015秒 –

+0

感謝它已被修復 –

0

1 -雖然從聲明相同的結構假設,所有三個表中有一列id,我們在這些表中用作主鍵。你需要記錄所有這三個特定的ID。

SELECT * 
FROM table1 t1, 
    table2 t2, 
    table3 t3 
WHERE t1.id=t2.id AND t2.id=t3.id 
-- ORDER BY id DESC 
LIMIT 10; 

這會給你相關的特定id所有三個表的前10條記錄。

2 -假設你只是結果從三個不同的查詢由id

SELECT * FROM table1 
UNION 
SELECT * FROM table2 
UNION 
SELECT * FROM table3 
--ORDER BY id DESC 
LIMIT 10; 
  • 合併爲一個語句,並優先考慮他們如果您從最後需要記錄取消註釋語句-- ORDER BY id DESC假設你有遞增的id
  • 如果你需要更多的記錄而不僅僅是改變在LIMIT到您需要的號碼。
  • 請注意:UNION運算符默認情況下只選擇不同的值。要允許重複值,請使用UNION ALL
+0

我認爲他正在尋找'UNION' –

+0

可能但不清楚。他試圖寫的「查詢」,對我來說,他似乎希望根據他們的「id」從三張表中找出記錄。 – SajjadHashmi

+0

@SajjadHashmi根據您的回答,查詢將只顯示table1.id = table2.id和table2.id = table3.id中匹配的行。意味着它只會顯示匹配的記錄。但問題是不同的。所以我不同意你的回答。 –

1

UNION用於將結果從多個SELECT語句合併成一個結果集

(SELECT u.name FROM user as u where u.active=1) UNION (SELECT pu.name FROM productuser as pu WHERE pu.active=1); 
相關問題