2009-12-11 9 views

答えて

8

+2

これらの2つのクエリは同じではありませんか? 2番目のものでは、別個のIDでなく、別個のIDだけを選択しています。 – DisgruntledGoat

+0

これは他のT-SQLでは動作しませんが、他のT-SQLでは高速に動作しません。 –

+1

もう1つはうまくいきません!!! GROUP BY句に含まれていない列には集計関数が必要です。 –

2
SELECT Code 
FROM YourTable 
GROUP BY Code 

あなたの結果から、二つの列が常に直接関連していることがわかっている場合、それはこれを行うために、より遅いです:これより

SELECT DISTINCT CustomerId, CustomerName FROM (...) 

SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId 

2番目のケースではidを比較するだけで済みますが、最初のケースでは両方のフィールドを比較する必要があります。これはMySQL固有のトリックです。他のデータベースでは動作しません。

+4

これはどのようにしてqの答えですか?何か不足していますか? – nawfal

0

基本的なルール:そう

SELECT DISTINCT a,b,c FROM D 

SELECT a,b,c FROM D GROUP BY a,b,c 
+1

私が間違っている場合は私を修正してください。基本的なルールではありません、GROUP BY句のSELECT句から非集約カラムをすべて入れますか? –

-2

例となり句

、GROUP BYにSELECT句のすべての列を入れてください。

関係顧客(ssnum、名前、郵便番号、住所)PK(ssnum)。 ssnumは社会保障番号です。

SQL:

Select DISTINCT ssnum from customer where zipcode=1234 group by name 

このSQL文は、最終結果では郵便番号1234を持っているが、名前でグループ化されたもの、顧客のためのユニークなレコードを返します。

ここでは、DISTINCTは必要ありません。 ssnunは主キーであるため、すでに一意のssnumを選択しているためです。 2人は同じssnumを持つことはできません。

この場合、Select ssnum from customer where zipcode=1234 group by nameは「... DISTINCT .......」よりも優れたパフォーマンスを発揮します。

DISTINCTはDBMSで高価な操作です。

+0

GROUP BYとGROUP BYを使用していない場合の答えの違いは何ですか?あなたはDISTINCTとDISTINCTを持たないときの答えの違いは何ですか?(それは '不明瞭'ですか?) AFAICSでは、クエリーはすべて同じ結果セットを生成しますが(必ずしもすべて同じスピードであるとは限りません) –

関連する問題