2012-10-09 84 views
1

我有兩個(或三個或四個...)表,我希望一次選擇所有表以統計所有表中的條目數。mysql從多個表中選擇,即使其中一個不包含where子句

例如,如果我有一些表: 「新聞」,「文章」,「畫廊」在每個表我呼籲像「AUTHOR_ID一排」

現在,

如果我使用以下select語句:

SELECT * 
FROM 
news as n, articles as a, galleries as g 
WHERE 
n.author = 1 
AND a.user = 1 
AND g.uploader = 1 

我只得到一個結果,如果每個表都有至少一個排,一個作者(或用戶或上傳任何)匹配的「1」 我怎樣才能得到即使結果產生一個(或兩個..)表不包含'1'

回答

1

或者,您可以在子查詢中使用UNION ALL合併所有表的結果。那麼你現在可以COUNT()指定的Author_ID。以下查詢將獲得所有表中指定的author_id的記錄總數。

SELECT COUNT(author_ID) 
FROM 
(
    SELECT userID AS Author_ID FROM news 
    UNION ALL 
    SELECT user_ID AS Author_ID FROM articles 
    UNION ALL 
    SELECT UiD AS Author_ID FROM galleries 
) a 
WHERE a.Author_ID = 1 

的後續問題,

  • 你怎麼想顯示的結果?因爲這也可以通過加入表格來解決。
  • 或者你想要計算記錄的主表和引用表是什麼?
+0

想像您的用戶配置文件。我只想計算一下「用戶John Woo提交了4200個回覆」。問題是我沒有一個名爲答覆的表。回覆可能是這樣的評論,它會被存儲在一個名爲「評論」的表中,或者回復可能與您的回覆類似。該回復將存儲在名爲「回覆」的表中。所以沒有真正的回覆一個「主表」..我想選擇的所有表都是獨立於另一個.. ,我無法使用您的選擇,因爲存儲我的用戶標識的行在每個表中都沒有被稱爲author_id .. – lexith

+0

當然好..這將工作。 實際上,我想避免工會選擇,因爲這不會像三個單選? – lexith

+0

@aeres我得到它,看到我更新的答案,所以問題是表的列名可以彼此不同。您可以在每列上添加一個「別名」。 –

0

你必須使用的領域,從每一個表像

SELECT n.author, a.user, g.uploader FROM news as n, articles as a, galleries as g 
WHERE n.author = 1 AND a.user = 1 AND g.uploader = 1 

那麼它會工作

+0

nope,那不是真的 – lexith

+0

它發生了什麼 – KMKMAHESH

+0

如果我使用你的語句,它不會返回任何東西,例如,畫廊沒有與價值g.uploader =「1」的行。它實際上是我在我的問題中寫的相同的東西。 – lexith

0

news表似乎是父表,所以你應該LEFT JOINarticles並顯示galleries表與news表獲得作者人數,如下:

SELECT * 
FROM 
    news n 
    LEFT JOIN articles a 
    ON n.author_id = a.author_id AND a.user = 1 
    LEFT JOIN galleries g 
    ON n.author_id = g.authori_id AND g.uploader = 1 
+0

theres沒有父表。所有的表格都是相互獨立的。 – lexith

相關問題