2012-04-27 1 views
1

の予想外の量に参加したところmysqlのは、私は2つのテーブルを持って返します行

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

私は以下のクエリを実行しました。正しく動作しています.Uがチェックアウトできます。

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

私は 'SUM()'がなければ正しいと思います。 MySQLが 'FROM DUAL'をサポートしているかどうかは分かりませんが、私はあなたがそれを省略できることを確かに知っています。 –

+0

mySqlのデュアルサポート – Addicted

+0

ohhh ya 実際に私は同時に2つのクエリを試していたので、私はそれを混ぜ合わせたと思います... はい – Addicted

1

私はクエリで与えられたuidでtableAの3つの行があると思います。これは、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 

ユニオンは2つのクエリの結果を結合します。結合は、単一の問合せで表表の列を結合します。

+0

私の編集したクエリは次のようになります。uid = 912391178669とは、テーブルBのuid = 912391178669から合計として= 0 組合すべて SELECT COUNT(ID)が削除にtableAからトータルとしてSELECT COUNT(ID)削除された= 0しかし、私はphpmyadminでそれを実行するときに私は合計41 | 3を取得する私はそれがちょうど41返されたことを示すスクリプトでそれを実行...どのように私はそれを確認することができますか? – fxuser

+0

@fxuser:私はJeffの考えは、あなたにこのようなものにつながると思いました: 'SELECT COUNT(*)FROM(/ * UNIONクエリ* /)somealias'。 –

0
41*3=123 

テーブルAの各行は、各行はまた、あなたが123行の合計を取得している理由のuidを持っている= UIDを持ち912391178669とTABLEB。希望の結果を得るためにいくつかのフィルター基準を使用してください(AND条件のように)

私たちにあなたのテーブルの列を表示することができれば、あなたを助けることができます。

左結合は2つのテーブルの行を結合しません。
TableA left join TableBは、結合条件を満たすテーブルAのすべての行を提供します。

+0

質問にスキーマを追加しました – fxuser

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 
関連する問題