![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
テーブルの自己結合について教えてください。
以下のようなテーブルAがあります。
Table A
collumn1(企業名) collumn2(フラグ)
B 0
C 0
D 1
B 1
C 0
E 0
E 1
E 1
これにおいて、フラグが1の企業でかつ
フラグの如何に関わらず同じ企業名があればその企業名を
とってきたいです。
上の例では企業BとEとなります。
企業名が同じでもフラグが0のものばかりであればとってきません。
この条件を私が考えたのは
select collumn1 from A where collumn2 = 0 and collumn1 = (select collumn1 from A where collumn2 = 1)
というSQLなのですが、うまく取れません。
なにも取って来なくなります。
何がいけないでしょうか。
アドバイス、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
DBMSが何で、どうやって呼んでいるかはわかりませんが、
そのアプローチでは、対象件数がゼロなのではなく、エラーになっていると考えるべきかと。
collumn1 = (select collumn1 from A where collumn2 = 1)
は
collumn1 IN (select collumn1 from A where collumn2 = 1)
でないと普通はエラーになるからです(戻り値が複数ある場合イコールは使えない)
上記の通り書き換えれば、BとEは返ってきます。
しかし、それでも、[E,0]のレコードがなかった場合はEは抽出されなくなります。
こういうやり方はどうでしょう?
select collumn1 from A
group by collumn1
having count(*)>1 AND max(collumn2)>0
この回答への補足
ご回答ありがとうございました。
こんな方法があるのですね・・・。
目から鱗です!
ほとんどしたかった事は実現できていると思います。
ただ、フラグは実は0/1ではなくTrue/Falseなのです。
そのため、Maxを使うと出てこなくなりました。
select collumn1 from A
group by collumn1
having count(*)>1
なら、B,C,Eが出てきます。
あと一息、Trueのものを含む形にできないでしょうか。
よろしくお願いいたします。
No.3
- 回答日時:
今お使いのDBMSでCASE式が使えるなら、
MAX(CASE WHEN COLLUMN2=1 THEN 1 ELSE 0 END)>0
にすればOKです。
(ACCESSなどであればIIFで)
アドバイスありがとうございました!
accessを使っていましたが、
新しい項目を数値型で作り、
フラグがtrueなら1を、falseなら0を入れることで
Maxを使用できるようになりました。
ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フラグをたてるってどういうこ...
-
Excel 複数のセルが共に一致す...
-
access vba での left join に...
-
【エクセル/excel】if関数とフラグ
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
truncate tableを使って複数の...
-
selectの単純繰り返し
-
'modify' 付近に不適切な構文が...
-
Accessの構成をコピーしたい
-
UPDATEで既存のレコードに文字...
-
T-SQLで任意の箇所で強制終了す...
-
IDとパスワードについて。
-
sqlに記述できない文字
-
同一テーブル内での比較(最新...
-
オラクルのUPDATEで複数テーブル
-
テーブル名が可変の場合のクエ...
-
SQLSERVER 連番更新について
-
SQLで、Join句で結合したテ...
-
【VB】セルが空になるまで処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フラグをたてるってどういうこ...
-
SQLで一定時間周期毎の抽出方法...
-
カラムに設定した日付が24時間...
-
Excel 複数のセルが共に一致す...
-
フラグってどういう意味ですか...
-
Accessのクエリ抽出
-
【エクセル/excel】if関数とフラグ
-
フラグの文字型は?
-
下4桁を*表示
-
片方のテーブルに存在しないレ...
-
内部結合
-
selectによるレコード取得結果...
-
Access演算コントロールについて
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
スキーマ
-
sqlに記述できない文字
-
オラクルのUPDATEで複数テーブル
-
Accessで今日から5日後
-
timestampのデータはどのように...
おすすめ情報