指定した second_no しか存在しない no を抽出したいのですが、
どのように SQL 文を記述すればよいか分からなかったので、
記述方法についてアドバイスいただける方がいらっしゃいましたら、
ご教示の程、よろしくお願いします。
[test_table]テーブル
―――――――――
id|no|second_no
―――――――――
1 |11|01
2 |11|03
3 |11|05
4 |12|05
5 |13|00
6 |13|05
7 |14|00
8 |14|05
―――――――――
【やりたい事1】
下記のように second_no が 00 と 05 のものを抽出すると、no = 11, 12, 13, 13, 14, 14 が抽出されます。
SELECT *
FROM test_table
WHERE second_no = '00'
OR second_no = '05'
これを no = 13, 14が抽出され、no = 11, 12 は抽出されないようにしたいです
(no = 11 は、second_no に 01 という 00, 05 以外の値が存在する為です。
no = 12 は second_no に 00 が存在しない為です)。
その為、下記の方法で出来ないかと考えました。
1. 全件取得
2. 部分取得
3. 全件取得で獲得した no と部分取得で獲得した no の個数が一致したものが今回取得したいもの。
上記の考え方をソースにしたものは下記となりますが、
この考え方では、no = 12 が抽出されてしまうため、
考え方を変える必要があるのですが、どうすればよいか分かりませんでした。
なお、抽出したい second_no は 00 で抽出したいときもあれば、
00 と 05 で抽出したいときなど複数のパターンがあります。
それと、下記のソースの「データベースユーザ名」「データベースパスワード名」
「データベース名」はそれぞれの環境に合わせる必要があります。
【ソース】
<?php
$link = mysql_connect('localhost', 'データベースユーザ名', 'データベースパスワード名');
mysql_select_db('データベース名', $link);
// 1.全件取得
$query = mysql_query("SELECT * FROM test_table", $link);
while ($row = mysql_fetch_array($query)) {
// echo $row["no"];
// echo "<br>";
}
//echo "<br>";
// 2.部分一致。
$query = mysql_query("SELECT * FROM test_table WHERE second_no = '00' or second_no = '05'", $link);
while ($row = mysql_fetch_array($query)) {
// echo $row["no"];
// echo "<br>";
}
// 3.ここで1と2の結果を参考に、noが13と14を抽出したい。
mysql_close($link);
?>
【やりたい事2】
上記のソースは複数の SQL 文で実現しようとしていますが、
1つの SQL 文でこのような動作を実現する事は出来ないでしょうか?
以上、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>組合せはユニークではなく、同じ値が存在しました。
じゃ、ちょっと工夫してこんな感じで?
SELECT *
FROM test_table
WHERE no IN(
SELECT no
FROM (SELECT DISTINCT no,second_no FROM test_table) AS SUB
GROUP BY no
HAVING count(second_no)=2 AND sum(IF(second_no IN ('00','05'),1,0))=2
)
ご回答ありがとうございます。
ご教示いただいたSQL文で意図した動作になったと思います。
このたびはどうもありがとうございました。
No.1
- 回答日時:
追加条件が必要、noとsecond_noの組合せはユニークであること
(つまりno=11にsecond_noが00であるものが2つないということ)
それであれば思い付きこんな感じで・・・
(もっと効率的なのもありそうですが)
SELECT *
FROM test_table
WHERE no IN(
SELECT no
FROM test_table
GROUP BY no
HAVING count(second_no)=2 AND sum(IF(second_no IN ('00','05'),1,0))=2
)
ご回答ありがとうございます。
確認した所、no と second_no の組合せはユニークではなく、同じ値が存在しました。
なお、同じ値が存在しない場合、ご教示いただいた SQL 文で動作する事は確認しました。
SELECT no
FROM test_table
GROUP BY no
HAVING count(id) = 2
AND sum(IF(second_no IN ('00','05'),1,0)) = 2
それでこれは私のミスで大変申し訳ないのですが、
no と second_no の組合せはユニークで無い場合も、
【やりたい事1】の抽出ができる方法はないでしょうか?
それと【やりたい事2】の1つの SQL 文で実現する方法をご教示いただきありがとうございました。
出来ましたら、no と second_no の組合せはユニークで無い場合も1つの SQL 文で動作する方法をご教示いただけますと大変助かります。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- 英語 「名詞+for...to不定詞句」で「for以降」が完全な文となる場合の名詞との関係について 4 2023/04/26 09:45
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- 英語 不定代名詞"no..."の否定語noの及び範囲について 4 2022/08/04 11:11
- Access(アクセス) MAXで0が出力される 1 2022/03/31 21:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php 入力画面から確認表示画面...
-
PHPでCSVを出力するさいに、ル...
-
ワードプレスサイト PHP8.0.25...
-
PHPを使って、別サイトの一部を...
-
PHP ページング データベース
-
Q&Aサイトを作成していてURLの...
-
PHPの構文で間違えが分からない
-
書籍とその書籍が提供している...
-
PHPとHTML+Xamppの掲示板で画像...
-
ファイルの書き込みについて教...
-
Postgresの特定のカラムからス...
-
htmlspecialcharsが機能してい...
-
【初心者】XAMPPのapacheの(恐...
-
プログラミング言語で、使える...
-
こちらはただの直列処理ですか?
-
PHPでこのコード自体に意味は無...
-
phpでPEAR::DBを使っているので...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
-
awsにApacheとPHPを入れて、何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAについて
-
PHPで[]の使い方について
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
phpでmysqlを使ってデータベー...
-
sortable ギブアップです…助け...
-
PHPでMY SQLの連想配列をリンク...
-
checkboxクリック時、SQLを実行...
-
チェックボックスによる複数の...
-
PHPでMySQLデータを呼び出し、w...
-
mysql_fetch_objectの書き方を...
-
SELECT結果から動的にコンボボ...
-
チェックボックスでチェックし...
-
VBA初心者です。
-
PHPについてなのですが未定義の...
-
文字化けが解決できません。お...
-
htmlとphpの分離
-
php テーブルが作成できない
-
検索結果をgoogleのように数件...
おすすめ情報