2015-05-19 36 views
1

IM製作lefjoin在MySQL諮詢這樣MySQL的左連接數,如果表是沒有空

SELECT A.*,B.*,C.*,D.* 
    from TableA A 
    left join TableB B on A.id=B.id 
    left join TableC C on A.id=C.id 
    left join TableD D on A.id=D.id 
    where 
//some condition 
//group by 
//order by 

最終的結果是一個數組一維的,但有些價值不具有數據他們,比如我有一些價值B.Value1: nullC.Value1: null,B.Value2: null

我在找,它是隻計算表的數據,方程式。

  • 乙表是空白的id=20所以此id的結果應該是3(A,C和d)
  • C,d表是空白的id=22所以此id的結果應該是2(A和B)

注:

  • 如果在表1箇中值爲空的表格中沒有數據有此ID
  • 表A中總是有數據
+3

我想你誤解的概念mysql查詢語句和結果。因此,當您查詢任何語句時,結果將始終具有相同的列數。所以,如果你的期望:* B表格對於id = 20是空白的,所以這個id的結果應該是3(A,C和D)*意味着你期望結果集中的某些記錄將有3列,記錄4列 - 一些記錄返回2列 - 你的期望是絕對錯誤的。你不能用任何sql服務器(mysql,sql,oracle,postgres)來做到這一點。永遠不會結果集包含不同行數的不同列數。 – Alex

+0

你可以通過在單個列中連接結果來「模擬」這種行爲(基本的MySQL concat函數忽略空值),但它是不可靠的。 – Capsule

+0

使用'JOIN'而不是'LEFT JOIN'。 – EternalHour

回答

2

我不知道如果這是你在找什麼,但我假設你想得到2列的結果。在第一列你想要的ID是存在於和你想要的ID出現在表數第二列。如果這樣這應該工作...

SELECT id, count(*) as num 
FROM (
    SELECT A.id FROM TableA A 
    UNION ALL 
    SELECT B.id FROM TableB B 
    UNION ALL 
    SELECT C.id FROM TableC C 
    UNION ALL 
    SELECT D.id FROM TableD D 
) mytables 
group by id 
+0

此作品謝謝 – jearca

+0

歡迎您 – naw103

1

你可能想使用union allgroup by查詢:

select id, count(distinct which) as NumTablesWithValue 
from ((select id, value, 'a' as which from tableA) union all 
     (select id, value, 'b' from tableb) union all 
     (select id, value, 'c' from tablec) union all 
     (select id, value, 'd' from tabled) 
    ) i 
group by id;