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

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

11
ユーザーごとの最新の日付の行を選択
ユーザーのチェックインとチェックアウトの時間のテーブル( "lms_attendance")は次のようになります。 id user time io (enum) 1 9 1370931202 out 2 9 1370931664 out 3 6 1370932128 out 4 12 1370932128 out 5 12 1370933037 in ユーザーIDごとに最新のレコードのみを出力するこのテーブルのビューを作成しようとしていますが、 "in"または "out"の値を提供しているため、次のようになります。 id user time io 2 9 1370931664 out 3 6 1370932128 out 5 12 1370933037 in 私はこれまでかなり近いですが、ビューはサブクエリを受け付けないことに気づきました。私が得た最も近いクエリは: select `lms_attendance`.`id` AS …

19
アクセスの連続する最小日数を決定するSQL?
次のユーザー履歴テーブルには、特定のユーザーが(24時間UTC期間に)Webサイトにアクセスした日ごとに1つのレコードが含まれています。何千ものレコードがありますが、ユーザーあたり1日1レコードのみです。ユーザーがその日のWebサイトにアクセスしていない場合、レコードは生成されません。 ID UserId CreationDate ------ ------ ------------ 750997 12 2009-07-07 18:42:20.723 750998 15 2009-07-07 18:42:20.927 751000 19 2009-07-07 18:42:22.283 私が探しているのは、パフォーマンスの良いこのテーブルのSQLクエリです。これにより、1日を逃すことなく(n)日間、どのユーザーIDがWebサイトにアクセスしたかがわかります。 言い換えると、このテーブルに連続する(前日または後)日付の(n)レコードを持っているユーザーの数は?シーケンスから欠落している日がある場合、シーケンスは壊れており、1から再開する必要があります。ここでは、ギャップのない連続した日数を達成したユーザーを探しています。 このクエリと特定のスタックオーバーフローバッジの類似点は、もちろん偶然です。

12
NOLOCK(SQL Serverヒント)は悪い習慣ですか?
私はウェブサイトやアプリケーションではないビジネスをしているミッションクリティカル ->例。バンキングソフトウェア、宇宙飛行、集中治療モニタリングアプリケーションなど。 それで、その大きな免責事項で、いくつかのSqlステートメントでNOLOCKヒントを使用するのは悪いことですか?何年も前に、仲間のSQL管理者から、「ダーティリード」に満足している場合はNOLOCKを使用するように勧められました。テーブル/行/何でも。 また、デッドロックが発生している場合は、これが優れたソリューションであるとも言われました。したがって、SQLグルがいくつかのランダムコードを手伝ってくれて、SQLコードのすべてのNOLOCKSに気付くまで、私は数年にわたってその考えに従いました。私は丁寧に叱られました、そして彼はそれを私に説明しようとしました(なぜそれが良いことではないのですか)そして私はちょっと迷いました。彼の説明の本質は「それはより深刻な問題に対するバンドエイドの解決策だと感じました。特にデッドロックが発生している場合は。そのため、問題の根本を修正してください。 私はそれについて最近グーグルをして、この投稿に出くわしました。 それで、いくつかのSQL DBの達人先生が私を啓発してくれますか?

7
MySQLクエリでDISTINCTとCOUNTを一緒に使用する
このようなものは可能ですか? SELECT DISTINCT COUNT(productId) WHERE keyword='$keyword' キーワードに関連付けられている固有の製品IDの数を取得する必要があります。同じ商品がキーワードに2回以上関連付けられている可能性がありますが、商品IDごとに1回だけカウントされるようにしたい
125 mysql  sql 

5
SQL-多対多テーブルの主キー
この質問は、この質問のコメントを読んだ後に出てきます。 データベース設計 多対多のテーブルを作成する場合、2つの外部キー列に複合主キーを作成するか、自動インクリメントサロゲート "ID"主キーを作成し、2つのFK列(およびおそらく一意の制約)?いずれの場合も、新しいレコードの挿入/再インデックス付けのパフォーマンスにどのような影響がありますか? 基本的に、これ: PartDevice ---------- PartID (PK/FK) DeviceID (PK/FK) 対これ: PartDevice ---------- ID (PK/auto-increment) PartID (FK) DeviceID (FK) コメンターは言う: 2つのIDをPKにすることは、テーブルがディスク上で物理的にその順序でソートされることを意味します。したがって、(Part1 / Device1)、(Part1 / Device2)、(Part2 / Device3)を挿入すると、(Part 1 / Device3)データベースはテーブルを分割し、最後のテーブルをエントリ2と3の間に挿入する必要があります。多くのレコードでは、レコードが追加されるたびに数百、数千、または数百万のレコードをシャッフルする必要があるため、これは非常に問題になります。対照的に、自動インクリメントPKを使用すると、新しいレコードを最後まで追加できます。 私が質問している理由は、代理の自動インクリメント列がない複合主キーを常に実行する傾向があるためですが、代理キーの方が実際にパフォーマンスが高いかどうかはわかりません。


6
SQL Serverのスキーマバインドビューによって参照される列のサイズの変更
私はSQLサーバーの列のサイズを変更しようとしています: ALTER TABLE [dbo].[Address] ALTER COLUMN [Addr1] [nvarchar](80) NULL Addr1元々の長さでした40。 失敗し、このエラーが発生しました: The object 'Address_e' is dependent on column 'Addr1'. ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access this column. 私はそれを読んでみましたが、一部のビューがこの列を参照しており、SQL Serverが実際にエラーを発生させた列を削除しようとしているようです。 Address_e 以前のDB管理者が作成したビューです。 列のサイズを変更する他の方法はありますか?
124 sql  sql-server 


10
データベースをロックできなかったため、ALTER DATABASEが失敗しました
一部のプロセスが機能していないため、データベースを再起動する必要があります。私の計画は、それをオフラインにして、再びオンラインに戻すことです。 私はこれをSQL Server Management Studio 2008で実行しようとしています: use master; go alter database qcvalues set single_user with rollback immediate; alter database qcvalues set multi_user; go これらのエラーが発生しています: Msg 5061, Level 16, State 1, Line 1 ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later. Msg 5069, …

4
実際の例、SQLでOUTER / CROSS APPLYを使用する場合
私はCROSS / OUTER APPLY同僚と見ていましたが、実際に使用する場所の例を見つけるのに苦労しています。 私は内部結合よりもクロス適用をいつ使用すべきかを検討するのにかなりの時間を費やしましたか?グーグルするが、メイン(唯一)の例はかなり奇妙に見えます(テーブルの行数を使用して、別のテーブルから選択する行数を決定します)。 このシナリオには次のようなメリットがあると思いましたOUTER APPLY。 連絡先テーブル(連絡先ごとに1つのレコードが含まれます)通信エントリテーブル(連絡先ごとに電話、ファックス、電子メールを含めることができます) しかし、サブクエリ、共通テーブル式を使用しOUTER JOINてRANK()し、OUTER APPLYすべてが同じように実行するように見えます。これは、シナリオがに該当しないことを意味していると思いAPPLYます。 実際の例をいくつか共有し、機能の説明にご協力ください!

3
最初に特定の値を持つ行を返すにはどうすればよいですか?
クエリで、最初に列に特定の値が含まれるテーブルの行を返し、次に残りの行をアルファベット順に返します。 この例のようなテーブルがある場合: - Table: Users - id - name - city - 1 George Seattle - 2 Sam Miami - 3 John New York - 4 Amy New York - 5 Eric Chicago - 6 Nick New York そして、そのテーブルを使用して、クエリに最初にNew Yorkを含む行を返し、次に残りの行を都市でアルファベット順に返します。これは1つのクエリのみを使用して実行できますか?
124 sql  sql-order-by 

12
select * vs select column
2/3列が必要なだけSELECT *で、それらの列を選択クエリで提供する代わりにクエリを実行する場合、I / Oまたはメモリの増減に関するパフォーマンスの低下はありますか? 必要なく*を選択すると、ネットワークオーバーヘッドが発生する可能性があります。 しかし、選択操作では、データベースエンジンは常にディスクからアトミックタプルをプルするのですか、それとも選択操作で要求された列のみをプルするのですか? 常にタプルをプルする場合、I / Oオーバーヘッドは同じです。 同時に、タプルをプルする場合、要求された列をタプルから取り除くためにメモリが消費される可能性があります。 その場合、select someColumnはselect *よりも多くのメモリオーバーヘッドを持ちます。
124 sql  performance 

7
SQLは、あるテーブルのフィールドを別のテーブルのフィールドから更新します
2つのテーブルがあります。 A [ID, column1, column2, column3] B [ID, column1, column2, column3, column4] A常にのサブセットにBなります(つまり、のすべての列Aもに含まれますB)。 のすべての列のデータを使用して、特定の入力IDでレコードを更新したい。これはとの両方に存在します。BAAIDAB "Aのすべての列を設定する"UPDATEとだけ言って、列名を指定せずにそれを行う構文または他の方法はありますか? 私はPostgreSQLを使用しているため、特定の非標準コマンドも受け入れられます(ただし、推奨されません)。

3
既存のSQL Serverログインを同じ名前の既存のSQL Serverデータベースユーザーに接続する方法
単一のデータベースのユーザーを同じ名前のデータベースサーバーのログインに接続するSQL Serverコマンドはありますか? 例えば: データベースサーバー-既定のインスタンス データベース:TestDB サーバーログイン -TestUser TestDBの既存のユーザー-TestUser TestUserログインをTestDBデータベースのユーザーにしようとした場合、「ユーザー、グループ、またはロール」はすでに存在しています。 DB ユーザーをサーバーログインに割り当てる簡単な方法を知っている人はいますか?
124 sql  sql-server 

22
データベース構造を変更するためのバージョン管理システムはありますか?
私はしばしば次の問題に遭遇します。 データベースに新しいテーブルまたは列を必要とするプロジェクトのいくつかの変更に取り組んでいます。データベースを変更し、作業を続行します。通常、私は変更を書き留めて、ライブシステムで複製できるようにします。ただし、変更したことを常に思い出すことはできません。また、書き留めておくことも常に忘れています。 だから、私はライブシステムにプッシュし、大きくない明らかなエラーが発生しますNewColumnX。 これがこの状況のベストプラクティスではない可能性があるという事実に関係なく、データベースのバージョン管理システムはありますか?特定のデータベース技術については気にしません。存在するかどうか知りたいだけです。MS SQL Serverで動作する場合は、素晴らしいです。

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