1

人々

これが私の小さな問題です。私は3つのテーブルを持っています:a_names_1b_names_2c_names_3それらは構造によって同じです。それらのすべてには、名前と使用済みの2つの項目があります

これら3つのテーブルすべてから「使用済み」=1であるすべての「名前」を取得してカウントするために実行するQUERYはありますか。

私はこれを試しましたが、うまくいきませんでした:

(SELECT COUNT(*) 'name' from a_names_1) UNION 
(SELECT COUNT(*) 'name' from a_names_2) UNION 
(SELECT COUNT(*) 'name' from a_names_3) WHERE `used`=1

MySQL用のPHPMyAdminを使用しています。

どんな助けでもいただければ幸いです..事前に感謝します

4

5 に答える 5

1

namesこのクエリは、すべてのテーブルとは異なるカウントを出力します。used=1

select count(distinct name)
from
(
select name,used from a_names_1 where used=1
union all
select name,used from a_names_2 where used=1
union all
select name,used from a_names_3 where used=1
)  t

すべてのテーブルのNAMEごとにすべてのUSEDを合計し、used = 1のSUMのみで出力する必要がある場合は、次のようにします。

select count(*) from
(
select name, SUM(used)
from
(
select name,used from a_names_1
union all
select name,used from a_names_2
union all
select name,used from a_names_3
)  t
GROUP BY name
HAVING SUM(used)=1
) t1
于 2013-01-25T10:10:32.193 に答える
0
select count(*) as name 
from 
(
select name, used from a_names_1
union 
select name, used from a_names_2
union
select name, used from a_names_3) t
where t.used = 1
于 2013-01-25T10:08:48.740 に答える
0

インデックスの最適化が失われるため、おそらくこれは遅いです。私がすることは、次のような3つのクエリを実行することです。

SELECT SUM('name') AS name_sum
FROM ((SELECT COUNT(*) 'name' from a_names_1 WHERE `used`=1) 
     UNION (SELECT COUNT(*) 'name' from a_names_2 WHERE `used`=1));

これが機能しない場合は、名前の使用に問題がある可能性があります

于 2013-01-25T10:11:19.920 に答える
0

多分あなたはこのように欲しかった:

select count(*) as cnt
from 
(
    select name from a_names_1 t1 where t1.used = 1
    union 
    select name from a_names_2 t2 where t2.used = 1
    union
    select name from a_names_3 t3 where t3.used = 1
) t
于 2013-01-25T10:11:42.030 に答える
0

簡単な解決策。

SELECT SUM(used) FROM (
  SELECT used FROM a_names_1 WHERE used=1
  UNION ALL
  SELECT used FROM a_names_2 WHERE used=1
  UNION ALL
  SELECT used FROM a_names_3 WHERE used=1
) a

テスト用の SQLfiddle

usedインデックスがオンになっている場合(および使用される値は 0 または 1 のみ) の場合の代替方法は、インデックスを使用してカウントを行うことです。

SELECT SUM(used) total FROM (
  SELECT SUM(used) used FROM a_names_1
  UNION ALL
  SELECT SUM(used) FROM a_names_2
  UNION ALL
  SELECT SUM(used) FROM a_names_3
) a

この例の SQLfiddle

後者のクエリのクエリ プランを見ると、インデックスを効果的に使用していることがわかります。

于 2013-01-25T10:13:33.557 に答える