VB2005+Access2007を使用しております
SQL文の複数列副問い合わせについて教えて下さい
検索をしても他のデータベースのものばかりヒットし、解決できません
SELECT *
FROM Uriage
WHERE
(Date, DateID) = (SELECT Date, DateID FROM Uriage WHERE NAME = 'cup')
これを実行すると
「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールド
を複数返すサブクエリを作成しました。サブクエリのSELECT ステート
メントを変更し、1 つのフィールドだけを指定してください。」
というエラーがでてしまいます。
形をかえ、
SELECT *
FROM Uriage
WHERE
Date = (SELECT Date FROM UriageList WHERE NAME = 'cup')
AND
DateID =(SELECT DateID FROM UriageList WHERE NAME = 'cup')
これを実行すると、
「このサブクエリでは 1 つのレコードしか返せません。」
というエラーがでてしまいます。
また、
SELECT *
FROM Uriage
WHERE
(Date) IN (SELECT Date FROM UriageList WHERE NAME = 'cup')
AND
(DateID) IN (SELECT DateID FROM UriageList WHERE NAME = 'cup')
を実行したところ、
エラーはでないものの、抽出結果が異なるものが出てきてしまいました。
これを解決するにはどのようにしたらよいのでしょうか?
よろしくお願いいたします。
なお、某知恵袋にも同様の質問をしてしまいましたが、
回答者様への回答や追加質問が出来ず、
こちらに再質問させて頂きました。申し訳ございません。
No.2ベストアンサー
- 回答日時:
知恵袋にも回答しましたが、
INNER JOIN を使えばどうでしょうか。
副問い合わせより高速にできる可能性が大です。
SELECT Uriage.Date, Uriage.DateID
FROM
Uriage INNER JOIN UriageList
ON Uriage.Date = UriageList.Date AND Uriage.DateID = UriageList.DateID
WHERE UriageList.NAME = 'cup';
INNER JOINを使用し、無事解決できました
的確なご指摘、ありがとうございます。
しかも、副問合わせより高速にできるとの事。
勉強になります。
あちらの掲示板でも、ありがとうございます
結果、マルチポストになった件、
改めて謝罪いたします。
みなさま、もうしわけありませんでした
No.3
- 回答日時:
サブクエリもクエリですからレコードの集合を返します
ですから、値を一つしか指定できないようなところで
サブクエリを使うと
>「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールド
>を複数返すサブクエリを作成しました。サブクエリのSELECT ステート
>メントを変更し、1 つのフィールドだけを指定してください。」
こういわれてしまうのです
集合に対する条件式の書き方としては
>SELECT *
>FROM Uriage
>WHERE
>(Date) IN (SELECT Date FROM UriageList WHERE NAME = 'cup')
>AND
>(DateID) IN (SELECT DateID FROM UriageList WHERE NAME = 'cup')
これであっています
>エラーはでないものの、抽出結果が異なるものが出てきてしまいました。
どういう抽出を期待しているのか分かりませんが
この書き方だとNameが"cup"であるDateの集合とDateIDの集合の重なる部分だけが
抽出されることになります
エラーの御説明、ありがとうございます。
エラー内容すら理解できない事、恥ずかしく思います。
>どういう抽出を期待しているのか分かりませんが
説明不足、申し訳ありませんでした
希望する抽出結果は、
UriageListテーブルの中からName='CUP'である「Date」と「DateID」を抜き出し、
Uriageテーブルのキーとなっている「Date」と「DateID」列を抜き出す
ことを期待しておりました。
結果、INNER JOINを使用し、解決することができました。
アドバイスありがとうございました
No.1
- 回答日時:
エラーメッセージのとおり、Existsを使用すればよいのではないでしょうか。
SELECT *
FROM Uriage
WHERE EXISTS (
SELECT
*
FROM UriageList
WHERE UriageList.NAME = 'cup'
AND UriageList.DataID = Uriage.DataID
AND UriageList.Date = Uriage.Date
)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
access2003 クエリSQL文について
その他(プログラミング・Web制作)
-
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
ACCESSクエリエラー
その他(データベース)
-
6
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
7
Accessのフィールド名に半角括弧を使ってしまった
Visual Basic(VBA)
-
8
構文エラー:演算子がありません。 ACCESS SQL
その他(データベース)
-
9
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
10
Access2010 「演算子がありません」エラー
その他(データベース)
-
11
ACCESSのSQLで、NULLかNULLでないかの判定
その他(データベース)
-
12
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
13
AccessのSQL文で1件のみヒットしたら終了させる構文。
その他(データベース)
-
14
ACCESS更新クエリで型変換エラー
Access(アクセス)
-
15
ACCESS2002のupdateの副問合せについて教えてください
その他(データベース)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
実行時エラー3131 FROM 句の構文エラーです について
Access(アクセス)
-
18
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
19
SELECTした結果に行番号を求めたい
PostgreSQL
-
20
レコードを保存するコード アクセスvba
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリで1フィールドの...
-
accessで空白の時の抽出
-
Accessクエリで特定の行を削除...
-
アクセスのクエリ…
-
AccessからExcelへの条件付エク...
-
Accessのデータの一部を削除す...
-
Accessのクエリーのゼロデータ...
-
SQLでのNULLのレコードの表示方...
-
access(アクセス):パラメータ...
-
Access クエリで連結する文字...
-
アクセスで任意の件数を抽出す...
-
access2019 チェックボックスと...
-
Access2007でSQLの複数列副問い...
-
Access:固定長文字列ファイル...
-
Access Left$関数で全角半角が...
-
ACCESS クエリ 抽出条件が多い場合
-
ExcelからAccessデータを検索す...
-
Accessでボタンを押すと今日の...
-
Accessのレポート上のテキスト...
-
「#エラー」の回避
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessクエリで特定の行を削除...
-
Access2007でSQLの複数列副問い...
-
Accessのクエリーのゼロデータ...
-
アクセスのフィルタ nullにつ...
-
access2019 チェックボックスと...
-
Accessのデータの一部を削除す...
-
Access クエリで連結する文字...
-
AccessからExcelへの条件付エク...
-
Accessのクエリで1フィールドの...
-
access(アクセス):パラメータ...
-
Accessクエリで年月フィールド...
-
Accessクエリ特定文字列のカウ...
-
accessで空白の時の抽出
-
アクセスで任意の件数を抽出す...
-
Access:固定長文字列ファイル...
-
Access Left$関数で全角半角が...
-
テーブルの差分をとる結合
-
ACCESS クエリ 抽出条件が多い場合
-
Access2003 削除クエリで式1フ...
-
ACCESSでのフィールド比較方法?
おすすめ情報