すみません。教えてください。。
ACCESSで下記2つのテーブルをunionでくっつけて
nameの右端(1桁目)が同一のもの(CとCCなど)を抽出するため
下記のような構文を構築したのですが抽出されません。。
お手数ですがこちら何が原因となっているか教えていただけないでしょうか。。
よろしくお願い致します。
id name id name
1 a 1 a
2 b 2 b
3 c 3 cc
4 d 5 ee
5 e
select * from (select * from tb1 union select * from tb2) as A
where name like '*c' or name like '*d' or name like '*e'
No.6ベストアンサー
- 回答日時:
たいへん失礼しました,(4)と(6)は私の構文ミスです,ANo.5への補足どおりの結果で問題ありません。
残った(5)の結果については釈然としないですね。
(7) select *
from (select * from tb1 union all select * from tb2)
(8) select right(name,1)
from (select * from tb1 union all select * from tb2)
の実行結果(全列名と全行データ)を提示していただくことはできますか。質問文中のサンプルデータは小さいものなので,それほど手間にはならないと思うのですけれど。
ご連絡が遅くなってしまい大変申し訳ありませんでした!!
こちら頂いた情報で再度組み直しましたところ、
正常に抽出することができました!!
大変ありがとうございました!!
No.5
- 回答日時:
>下記の部分ですでに対象のデータ何も表示されませんでした
エラーで実行できないのではなく,あくまで正常実行されたが結果が何も表示されないとおっしゃっているのですね?
>どこの時点で結果が抽出されないか確認しましたら
次のようなSQLの各部分の実行については結果が抽出されるが,ANo.4への補足のような句がすべて揃った時点で結果が抽出されなくなるとおっしゃっているのですね?
(1) select * from tb1
(2) select * from tb2
(3) select * from tb1 union all select * from tb2
(4) select Right(name,1) sum(id) as sum_id
from (select * from tb1 union all select * from tb2)
(5) select *
from (select * from tb1 union all select * from tb2)
where right(name,1)in('c','d','e')
(6) select *
from (select * from tb1 union all select * from tb2)
group by right(name,1)
ちなみに私は,Windows XP Professional SP2 + Access 2003 SP3 を使用しています。
この回答への補足
ご回答ありがとうございます!
>エラーで実行できないのではなく,あくまで正常実行されたが結果が何も表示されないとおっしゃっているのですね?
はい。そうなります。。。
>(1) select * from tb1
>(2) select * from tb2
>(3) select * from tb1 union all select * from tb2
上記に関しては正常に実行されます。
>(4) select Right(name,1),sum(id) as sum_id
>from (select * from tb1 union all select * from tb2)
集計関数の一部としてRight(name,1)を含んでいないクエリを実行しようとしているというエラーになってしまいます。。。
>(5) select *
>from (select * from tb1 union all select * from tb2)
>where right(name,1)in('c','d','e')
上記を実行すると正常実行結果が何も表示されません。。
>(6) select *
>from (select * from tb1 union all select * from tb2)
>group by right(name,1)
*で選択したフィールドはグループ化できませんとでます。。
私はWindows vista home premiam + Access 2003です。
No.4
- 回答日時:
ANo.1です。
具体データのおかげで,おっしゃりたいことが分かりました。次のコードでいけます。
------------------------------------------------
SELECT tail_chr, sum_id
FROM tb1, tb2, (
SELECT Right(name,1) AS tail_chr, sum(id) AS sum_id
FROM (
select * from tb1 union all select * from tb2
)
WHERE Right(name,1) In ('c','d','e')
GROUP BY Right(name,1)
)
WHERE Right(tb1.name, 1) = tail_chr and Right(tb2.name, 1) = tail_chr;
------------------------------------------------
三重になっているもっとも内側のselect文がunion all。単なるunionだと(1,'a')―(1,'a')や(2,'b')―(2,'b')のようにまったく同じ行を1つにまとめてしまうのでダメです。
真ん中のselect文は,Right()関数で末尾の1文字(tail_chr)だけを抽出してその値でグループ化し,idの合計(sum_id)を求めています。'c','d','e'以外は捨ててよいのですよね?
2つの表を1つにまとめた後で処理しているので,この段階の出力結果には,一方の表にしか存在しない('d', 4)も含まれています。そこで,tb1にもtb2にも(and条件)存在するかを調べているのがもっとも外側のselect文です。
この回答への補足
ありがとうございます!!
しかしながら試してみたのですが結果が抽出されませんでした。。。
どこの時点で結果が抽出されないか確認しましたら、
下記の部分ですでに対象のデータ何も表示されませんでした。。。
こちら何が原因なのでしょうか。。。
select Right(name,1) as tail_car,sum(id) as sum_id from (select * from tb1 union all select * from tb2)
where right(name,1)in('c','d','e')
group by right(name,1)
No.3
- 回答日時:
御存知なのに、私が勘違いしているかも知れませんが、ユニオンクエリというのは、2つのテーブルを『縦に』つなげるものです。
もし2つのテーブルが
id name
1 a
2 b
3 c
4 d
5 e
と
id name
1 a
2 b
3 cc
5 ee
なら
id name
1 a
2 b
3 c
4 d
5 e
1 a
2 b
3 cc
5 ee
が、まず、ユニオンクエリ(UNION ALL)の結果になります。
外していたら恥ずかしいのですが、あえて話を一歩進めると。
id1 name1 id2 name2
1 a 1 a
2 b 2 b
3 c 3 cc
4 d 5 ee
5 e
の型のテーブルにするには、普通の選択クエリを使います。
但し、それぞれのテーブルにキーとなるフィールドが必要です。
idがキーかなと、も見えるのですが、4 d 5 ee の行がそうなっていません。
この回答への補足
ご回答ありがとうございます!
今回はあくまで縦列から1桁目(右端)が同じものを
抽出したく思っております。。
やはりちょっと難しいでしょうか。。
No.2
- 回答日時:
>where name like '*c' or name like '*d' or name like '*e'
この条件はnameの右端がc、d、eのもを抽出しろですよ
>nameの右端(1桁目)が同一のもの(CとCCなど)を抽出
とは程遠いですね
右端が同じものが複数あるものを抽出したいのであれば
右端を取り出してグループとし、カウントした値が2以上のもの
を取り出すとかしないとだめでしょう
No.1
- 回答日時:
何が原因ですかと問われても,そのselect文はAccessでもエラーなく実行されますので,何がしたいのですかと問い返すだけなのですけれど。
質問文中の入力データから具体的にどんな出力データが得られるのが望みなのか,提示していただいた方が話が早いように思います。
この回答への補足
ご回答ありがとうございます!
最終的には2つのテーブルからnameの1桁目が同じもののidを
合計した結果を出力したいのです。
つまり結果は下記になります。
name id(sum)
c 6
e 10
それにはまず「nameの右端の1桁目が一致するものを抽出する」クエリを作成しなければならないと思いご質問させて頂きました。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- 英語 英語ができる方に質問です。 以下の文がネイティブの方に伝わるかどうかを確認していただけないでしょうか 7 2022/12/16 14:54
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
VIEWの元のテーブルのindexって...
-
insertを高速化させたい
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
一つ前のレコードの値と減算し...
-
SQLサーバから、項目の属性(型...
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
-
期間の重複を調べるSQL文につい...
-
テーブル名を省略して「h.id」...
-
SELECT~LIKE~の結果が変
-
[MySQL] UNIQUE制約の値を更新...
-
1テーブル&複数レコードの更新...
-
マイクラPC版のコマンドで効率...
-
URL と行番号の指定
-
副問合せの書き方について
-
上位3位を求めるSQL文は?
-
SQLにて特定の文字を除いた検索...
-
mysqlのload data infileで連番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報