1

私は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 | 削除

4

5 に答える 5

2

次のクエリを実行しました。正しく機能しています。Uで確認できます。

SELECT 
  ( SELECT count(*) from table1 where.... )
+ ( SELECT count(*) from table2 where.... )
as total from dual
于 2012-04-27T05:43:44.400 に答える
1

クエリで指定されたuidを使用してtableAに3つの行があると推測しています。これは、tableAの各行がtableBの各行と1回結合することを意味します。つまり、41x3行または123を戻すことになります。

予想される行数から、結合ではなくユニオンが必要かどうか疑問に思います。

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

union all

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

ユニオンは、2つのクエリの結果を結合します。結合は、単一のクエリでテーブルテーブルの列を結合します。

于 2012-04-27T05:00:03.500 に答える
0
41*3=123

TableAの各行にはuid=912391178669があり、tableBの各行にもuidがあるため、合計で123行になります。いくつかのフィルター基準を使用して、目的の結果を取得します(いくつかのAND条件など)

あなたが私たちにあなたのテーブルの列を見せてくれるなら、あなたを助けることができるかもしれません。

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

于 2012-04-27T05:00:34.460 に答える
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
于 2012-04-27T05:37:30.430 に答える
0
SELECT SUM(
  (SELECT count(*) from tableA WHERE uid=912391178669)
+ (SELECT count(*) from tableA WHERE uid=912391178669)
 ) as totalRows
于 2012-04-27T05:54:41.257 に答える