1

mysql を使用してwhere tid='any tid' 、クエリに従って試したすべてのテーブルから ID をカウントしようとしています"Column 'tid' in where clause is ambiguous"。join を使用する必要がありますか?

SELECT count('id') as reccount
   FROM table1,table2,table3
   WHERE tid= '101'
   AND `status` =  1

私は次のようなテーブル構造を持っています

table 1:
------------------------------
id      tid    status ........ 
1       101       1
2       102       1

table 2:
------------------------------
id      tid    status ........ 
 1      101      1
 2      102      1

table 3:
------------------------------
id      tid     status....... 
 1      101       1
 2      102       1

table 4: It contains tid 
--------------------------
tid     tname .....
101      xyz
102      abc
4

4 に答える 4

0

必要な出力を提供しませんでしたが、3 つのテーブルすべてから (元のクエリから推測して) 行の総数だけを取得することを目的としている場合は、次のことができます。

SELECT COUNT(`id`) AS reccount
  FROM 
    (SELECT `id` FROM table1 
     WHERE tid= '101' AND `status` =  1
     UNION ALL
    SELECT `id` FROM table2 
     WHERE tid= '101' AND `status` =  1
     UNION ALL
    SELECT `id` FROM table3
     WHERE tid= '101' AND `status` =  1) t

ここにsqlfiddleがあります

于 2013-02-20T05:58:31.730 に答える
0

以下の SQL を参照してください。

SELECT reccount_1 + reccount_2 +  reccount_3 as total_count FROM
(
    SELECT count(`id`) as reccount_1
    FROM table1
    WHERE tid= '101'
    AND `status` =  1
    UNION
    SELECT count(`id`) as reccount_2
    FROM table2
    WHERE tid= '101'
    AND `status` =  1
    UNION 
    SELECT count(`id`) as reccount_3
    FROM table3
    WHERE tid= '101'
    AND `status` =  1
) 
as temp_table
于 2013-02-20T06:01:12.280 に答える
0

UNION を使用する

SELECT count('id') as reccount , 'Table1' AS table   FROM table1    WHERE tid= '101'    AND `status` =  1
UNION
SELECT count('id') as reccount , 'Table2' AS table    FROM table2   WHERE tid= '101'    AND `status` =  1
UNION
SELECT count('id') as reccount , 'Table3' AS table    FROM table3   WHERE tid= '101'    AND `status` =  1

これにより、このようなカウントが得られます

reccount | table
   5         table1  
   10        table2
   15        table3

5、10、および 15 がカウントされます。たとえば、1 行だけで回答が必要な場合は、@peterm の回答を使用できます。

于 2013-02-20T05:56:41.540 に答える
0

テーブルを結合するのではなく、各テーブルから行を収集しているため、次のように UNION を実行する必要があります。

 SELECT count('id') as reccount
    FROM table1
    WHERE table1.tid= '101'
    AND `status` =  1
UNION
 SELECT count('id') as reccount
    FROM table2
    WHERE table2.tid= '101'
    AND `status` =  1
UNION
 SELECT count('id') as reccount
    FROM table3
    WHERE table3.tid= '101'
    AND `status` =  1

説明:from table1, table2, table3実行すると、それらすべてのテーブル間で結合が行われます。結合基準がないため、考えられるすべての結合が実行されます。たとえば、table1 からの 1 行、table2 からの 1 行、および table3 からの 1 行のすべての可能な組み合わせは、そのようなクエリの結果になります。

于 2013-02-20T05:54:28.193 に答える