質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

3回答

287閲覧

SQL文をおしえてください

yuki1111

総合スコア72

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

1グッド

0クリップ

投稿2019/06/03 23:01

編集2019/06/04 13:30

下記のようなテーブルから、下記の条件(AND条件)でデータを取得するSQL文を教えてください。
0. idが同じカラムが2つ
0. hizukeが0と0以外

sql

1CREATE TABLE sample 2 id CHAR(8) NOT NULL, 3 hizuke CHAR(8) NOT NULL
idhizuke
a12345670
a123456719870701
b123456719870301
b123456719870401
c123456719870501

試したSQL文(昨日職場で試したものなのでうろおぼえ)

SELECT
id, hizuke
FROM sample
GROUP BY id
HAVING COUNT(*) = 2

上記のSQL文ではhizukeが0と0以外だった場合だけのデータを取得できない。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/06/03 23:08

同じSQLでもデータベースによって方言が大きいですから、どのデータベースを使うのかを質問のタグで明示したり、バージョンも明記した方が適切なコメントが付き易いです。
gentaro

2019/06/03 23:09

まずご自身で試行錯誤し、その上で不明な点について質問されたほうが良いと思います。(規約違反になるので)
m.ts10806

2019/06/03 23:16

タイトルはもう少し具体的に要件のみを記載してください
退会済みユーザー

退会済みユーザー

2019/06/03 23:17

そのご質問のことを一般的には作業依頼と言います。
x_x

2019/06/04 01:04

0と0以外というのはすべてなのでは?
yuki1111

2019/06/04 13:20

みなさん、ご指摘ありがとうございます。 >Orlofskyさん はい。DB2と記載します。 >gentaroさん 試行錯誤したのですが、それを書くことを失念していました。これから書きます。 >mts10806 頭が悪すぎるからなのか、「具体的に要件」が全く思い浮かびません。 具体的な要件が自分でもわかったら修正したいと思います。 >yoshi0819 知りませんでした。気をつけます。 >x_x 「以外にも「以」の文字が入っていますが「以上」「以下」「以内」などとは違い、基準点は含まれません。」だそうです。 https://business-textbooks.com/over-under-difference/ なので、0と0以外はすべてではないと思います。
1T2R3M4

2019/06/04 13:38

>0と0以外はすべてではないと思います。 ベン図書けますか。
yuki1111

2019/06/04 14:55 編集

間違えた。0と0以外はすべてですね。 しかし、hizukeが必ず0と0以外のidを取得したかったんです。 例:| id |hizuke |a1234567| 0 |a1234567|20180711 ↑みたいなのを取得したかったんです。
guest

回答3

0

質問の意図が全然伝わりませんね。

  1. 二つの条件は AND なのですか OR なのですか?
  2. 条件2 は hizuke が null でない限り、どのレコードも当てはまります(しかも定義から hizuke は null ではありえません)から、意味がありませんが?

投稿2019/06/03 23:45

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

条件の説明がいまいちはっきりしませんが、ID毎に最新のhidukeのデータを抽出するという解釈で。

相関副問合せを用いて、駆動表よりhidukeが大きいものが存在しないものという条件にします。

SQL

1select * from sample t1 2where not exists( 3 select 1 from sample where hiduke > t1.hiduke 4 )

DBMSによってはこのパターン以外の記述方法が高速な場合もあります。

追記

同一IDが2件で、0と0以外のhidukeがあるIDの抽出

SQL

1select * from sample 2where ID in ( 3 select ID from sample t1 4 where exists( 5 select 1 from sample where hiduke != 0 and ID=t1.ID 6 ) 7 and exists( 8 select 1 from sample where hiduke = 0 and ID=t1.ID 9 ) 10 group by ID 11 having count(*)=2 12 )

投稿2019/06/04 00:16

編集2019/06/04 14:56
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki1111

2019/06/04 14:58

理解しにくい質問に答えていただき非常にありがたいです。
guest

0

※SQLiteで動作確認を行った。

  1. idが同じカラムが2つ
  2. hizukeが0と0以外

SQL

1SELECT 2 T1.ID AS ID 3 , T1.HIZUKE AS HIZUKE 4FROM 5 SAMPLE T1 6 , (SELECT ID FROM SAMPLE GROUP BY ID HAVING COUNT(1) = 2 ) T2 7WHERE 0 = 0 8 AND T1.ID = T2.ID 9 AND (EXISTS (SELECT 1 FROM SAMPLE WHERE HIZUKE != '0' AND T1.ID = ID) 10 AND EXISTS (SELECT 1 FROM SAMPLE WHERE HIZUKE = '0' AND T1.ID = ID)) 11ORDER BY ID
idhizuke
a12345670
a123456719870701

投稿2019/06/04 14:14

編集2019/06/04 14:20
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問