2012-04-27 174 views
1

意想不到的量我有2個表,其中MySQL的左連接返回行

tableA has 41 rows 

tableB has 3 rows 

我想使用左連接通過查詢來獲取這2代表的總行,但我得到比預期更多的方式行(123)(44)

查詢:

SELECT COUNT(*) 
    FROM tableA as u 
LEFT JOIN tableB as d 
    ON u.uid=d.uid 
WHERE 
    u.uid=912391178669 
    AND 
    u.deleted = 0 
    AND 
    d.deleted=0 

表的模式:

TABLEA

ID | uid |刪除

tableB的

ID | uid |刪除

回答

2

我已經運行以下查詢它工作正常..你可以檢查出來。

SELECT 
    (SELECT count(*) from table1 where....) 
+ (SELECT count(*) from table2 where....) 
as total from dual 
+0

上添加了架構我相信沒有SUM()就是正確的。我不確定MySQL是否支持'FROM DUAL',但我確定你可以忽略它。 – 2012-04-27 08:18:58

+0

在mySql中的雙重支持 – Addicted 2012-04-27 08:57:43

+0

ohhh ya 其實我是在同一時間嘗試兩個查詢,所以我想我混合起來... 是沒有總和也工作... – Addicted 2012-04-27 09:02:43

1

我猜你在tableA中有三行,在查詢中給出的uid。這將意味着tableA中的每一行將與tableB中的每一行連接一次,這意味着您將返回41 x 3行或123.

根據您期待的行數,我想知道您是否需要聯盟而不是加入。

Select * from tableA where uid = 912391178669 and deleted = 0 

union all 

Select * from tableB where uid = 912391178669 and deleted = 0 

聯合將結合兩個查詢的結果。聯接將在單個查詢中組合表格的列。

+0

我編輯的查詢是這樣的:從表A總SELECT COUNT(ID),其中uid = 912391178669和刪除= 0 UNION ALL SELECT COUNT(ID)爲總從tableB的其中uid = 912391178669和刪除= 0,但是當我運行它在phpmyadmin我得到總| 41 | 3當我在腳本中運行它顯示只有41返回...我怎麼能確保總和? – fxuser 2012-04-27 05:06:39

+0

@fxuser:我認爲Jeff的想法是引導你這樣做:'SELECT COUNT(*)FROM(/ * UNION查詢在這裏* /)somealias'。 – 2012-04-27 08:17:42

0
41*3=123 

TableA的每一行都有uid = 912391178669,而tableB的每一行也都有uid,這就是爲什麼你總共得到了123行。使用一些過濾標準來獲得所需的結果(如一些AND條件)

如果您可以向我們顯示您的表列,那麼它可能可以幫助您。

左連接不合並兩個表的行。
TableA左連接TableB會給你所有滿足連接條件的表A的行。

+0

我已經在問題 – fxuser 2012-04-27 05:14:23

0
SELECT COUNT(*) 
FROM tableA as u 
LEFT JOIN tableB as d 
ON u.uid=d.uid 
AND 
u.deleted = d.deleted 
WHERE 
u.uid=912391178669 
AND u.deleted = 0 
0
SELECT SUM(
    (SELECT count(*) from tableA WHERE uid=912391178669) 
+ (SELECT count(*) from tableA WHERE uid=912391178669) 
) as totalRows