タグ付けされた質問 「sql」

構造化照会言語(SQL)は、データベースを照会するための言語です。質問には、コード例、テーブル構造、サンプルデータ、使用するDBMS実装(MySQL、PostgreSQL、Oracle、MS SQL Server、IBM DB2など)のタグを含める必要があります。質問が特定のDBMSにのみ関連している場合(特定の拡張機能を使用)、代わりにそのDBMSのタグを使用してください。SQLでタグ付けされた質問への回答には、ISO / IEC標準SQLを使用する必要があります。

9
外部キーはクエリのパフォーマンスを向上させますか?
ProductsとProductCategoriesという2つのテーブルがあるとします。両方のテーブルは、CategoryIdに関係があります。そしてこれがクエリです。 SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category FROM Products p INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId WHERE c.CategoryId = 1; 実行プランを作成すると、予想どおり、テーブルProductCategoriesがクラスターインデックスのシークを実行します。しかし、テーブル製品の場合、クラスターインデックススキャンを実行するので、疑問に思います。FKがクエリのパフォーマンス向上に役立たないのはなぜですか? したがって、Products.CategoryIdにインデックスを作成する必要があります。再度実行プランを作成すると、両方のテーブルがインデックスシークを実行します。また、推定されるサブツリーのコストが大幅に削減されます。 私の質問は: FKは関係の制約に役立ちますが、他に何か便利なことはありますか?クエリのパフォーマンスは向上しますか? すべてのテーブルのすべてのFK列(Products.CategoryIdなど)にインデックスを作成する必要がありますか?

3
特定のスキーマにテーブルが存在するかどうかを確認する方法
Postgres 8.4以降のデータベースには、publicスキーマ内の共通テーブルとスキーマ内の会社固有のテーブルが含まれていcompanyます。 companyスキーマ名は常に'company'会社番号で始まり、会社番号で終わります。 したがって、次のようなスキーマがある場合があります。 public company1 company2 company3 ... companynn アプリケーションは常に1つの会社で動作します。同様に、ODBCまたはNpgsqlの接続文字列に応じて指定されています。search_path search_path='company3,public' 特定のcompanynスキーマが指定されたスキーマに存在するかどうかをどのように確認しますか? 例えば: select isSpecific('company3','tablenotincompany3schema') 返す必要がありますfalse、と select isSpecific('company3','tableincompany3schema') 戻る必要がありtrueます。 いずれの場合も、関数はcompanyn渡されたスキーマのみをチェックし、他のスキーマはチェックしないでください。 指定されたテーブルがpublic、渡されたスキーマの両方に存在する場合、関数はを返す必要がありますtrue。 Postgres 8.4以降で動作するはずです。

6
PostgreSQLでON CONFLICTを使用してRETURNINGを使用する方法
PostgreSQL 9.5には次のUPSERTがあります。 INSERT INTO chats ("user", "contact", "name") VALUES ($1, $2, $3), ($2, $1, NULL) ON CONFLICT("user", "contact") DO NOTHING RETURNING id; 競合がない場合は、次のようなものが返されます。 ---------- | id | ---------- 1 | 50 | ---------- 2 | 51 | ---------- ただし、競合がある場合、行は返されません。 ---------- | id | ---------- id競合がない場合は新しい列を返すかid、競合する列の既存の列を返します。 これはできますか?もしそうなら、どうですか?

4
2つの列の組み合わせに一意の制約を追加する
テーブルがあり、どういうわけか、同じ人が私のPersonテーブルに2回入りました。現在、主キーは単なる自動番号ですが、他の2つのフィールドを使用して、一意にする必要があります。 たとえば、フィールドは次のとおりです。 ID Name Active PersonNumber 一意のPersonNumberおよびActive = 1の1つのレコードのみが必要です (したがって、2つのフィールドの組み合わせは一意である必要があります) SQLサーバーの既存のテーブルで最善の方法は何ですか?既存の値と同じ値を使用して他の人が挿入を行った場合、失敗するので、アプリケーションコードでこれを心配する必要はありません。
149 sql  sql-server 

6
LINQ to SQL-複数の結合条件を使用した左外部結合
LINQに変換しようとしている次のSQLがあります。 SELECT f.value FROM period as p LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17 WHERE p.companyid = 100 左外部結合の典型的な実装(例:into x from y in x.DefaultIfEmpty()など)を見てきましたが、他の結合条件(AND f.otherid = 17)を導入する方法がわかりません 編集 AND f.otherid = 17条件がWHERE句ではなくJOINの一部であるのはなぜですか?そのためf一部の行のために存在し、私はまだこれらの行が含まれたくないかもしれません。条件がWHERE句のJOINの後に適用された場合、希望する動作が得られません。 残念ながらこれ: from p in context.Periods join f in context.Facts on p.id …
148 c#  sql  linq  linq-to-sql  outer-join 

10
MySQLで現在の日付と時刻を取得する方法は?
現在の日付と時刻を挿入するために手動クエリで使用できるDATETIMEのような値またはコマンドはありますか? INSERT INTO servers ( server_name, online_status, exchange, disk_space, network_shares ) VALUES( 'm1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE' 'DATETIME' ) 最後に引用符で囲まれたDATETIME値は、現在の日付と時刻を追加する場所です。
148 mysql  sql  datetime 

13
すべて(またはほとんど)のデータベースで機能する効率的なSQLテストクエリまたは検証クエリ
多くのデータベース接続プールライブラリには、SQL接続のアイドル状態をテストする機能があります。たとえば、JDBCプーリングライブラリc3p0にはと呼ばれるプロパティpreferredTestQueryがあり、接続で設定された間隔で実行されます。同様に、Apache Commons DBCPにはがありvalidationQueryます。 私が見たクエリの例の 多くはMySQL 用であり、テストクエリの値として使用することをお勧めします。ただし、このクエリは一部のデータベース(たとえば、HSQLDB、句を必要とする)では機能しません。SELECT 1;SELECT 1FROM 同等に効率的ですが、すべてのSQLデータベースで機能するデータベースに依存しないクエリはありますか? 編集: ない場合(そうであるようです)、さまざまなデータベースプロバイダーで機能する一連のSQLクエリを誰かが提案できますか?私の目的は、データベースプロバイダーの構成に基づいて、使用できるステートメントをプログラムで決定することです。

5
MySQLでバッチ挿入を行う方法
テーブルに入力する必要のあるレコードが1つ以上あります。クエリでこれを行う最良の方法は何ですか?ループを作成し、反復ごとに1つのレコードを挿入する必要がありますか?またはより良い方法はありますか?
148 mysql  sql  database  insert 

8
ORA-00979式によるグループ化ではありません
次のクエリでORA-00979を取得しています。 SELECT cr.review_sk, cr.cs_sk, cr.full_name, tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt", cs.cs_id, cr.tracking_number from review cr, cs, fact cf where cr.cs_sk = cs.cs_sk and UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%' and row_delete_date_time is null and cr.review_sk = cf.review_wk (+) and cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number ORDER BY …
147 sql  oracle  ora-00979 


13
末尾のスペースを削除してSQL Serverの列を更新する
というSQL Serverテーブルの列の末尾にスペースがありますCompany Name。 この列のすべてのデータには、末尾にスペースがあります。 これらをすべて削除し、末尾にスペースを入れずにデータを保持したいと考えています。 会社名は "Amit Tech Corp " 会社名になりたい "Amit Tech Corp"

18
SQLを使用してPostgres db 8.1のすべてのシーケンスを一覧表示する
私はdbをpostgresからmysqlに変換しています。 トリック自体を実行するツールが見つからないため、mysqlですべてのpostgresシーケンスをautoincrement値を持つautoincrement idに変換します。 では、Postgres DB(8.1バージョン)のすべてのシーケンスを、それが使用されているテーブル、次の値などの情報とともにSQLクエリで一覧表示するにはどうすればよいですか? information_schema.sequences8.4リリースではビューを使用できないことに注意してください。

12
Java-SQLインジェクションを防止するエスケープ文字列
私はいくつかのアンチSQLインジェクションをJavaに配置しようとしていますが、「replaceAll」文字列関数を操作するのは非常に困難です。最終的に、既存の\to \\、any "to \"、any 'to \'、およびany \nを変換\\nして、文字列がMySQL SQLインジェクションによって評価されるときにブロックされるようにする関数が必要です。 使用していたコードをいくつかジャッキアップしました\\\\\\\\\\\が、関数内のすべてが目を凝らしています。誰かがこの例を偶然持っているなら、私はそれを大いに感謝します。


9
SQL Serverのユーザー定義関数からエラーを報告する方法
私はSQL Server 2008でユーザー定義関数を書いています。関数は通常の方法でエラーを発生させることができないことを知っています。RAISERRORステートメントを含めようとすると、SQLは次を返します。 Msg 443, Level 16, State 14, Procedure ..., Line ... Invalid use of a side-effecting operator 'RAISERROR' within a function. しかし、実際には、関数は何らかの入力を受け取りますが、これは無効である可能性があり、そうである場合、関数が返す意味のある値はありません。それから私は何をしますか? もちろん、NULLを返すこともできますが、関数を使用する開発者がこれをトラブルシューティングするのは困難です。また、ゼロによる除算またはそのようなものを引き起こす可能性があります-これはエラーメッセージを生成しますが、誤解を招くものです。自分のエラーメッセージを何らかの方法で報告させる方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.