0

重複の可能性:
MYSQLは重複行を返しません

私はこの質問が以前に尋ねられたことを知っていますが、私の状況でうまくいった解決策を見つけることができませんでした。典型的なSQLステートメントは次のようになります。

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%'

$ hostvalは、システムの名前に置き換えられるPowerShell変数です。したがって、OldGlory117という名前のシステムがある場合、ステートメントは次のようになります。

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%OldGlory117%'

他の列のために、一部の行が重複しており、データベースに重複するホスト名があります。したがって、上記のクエリは次を返す可能性があります。

OldGlory117    USA    Rack1
OldGlory117    USA    Rack1
OldGlory117    USA    Rack1

これは、重複の原因となる列を探していない場合に問題になります。ホスト名に一意の値を持つ行のみを返す方法はありますか?WHEREステートメントでホスト名を指定していない場合はどうなりますか?元:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%'

ありがとう!

4

4 に答える 4

2

GROUP BYを使用することはできますか?

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%' GROUP BY Hostname
于 2013-01-22T21:54:16.317 に答える
1

これを試して:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Rack LIKE '%Rack1%' having count(Hostname)=1 GROUP BY Hostname,Site,Rack

編集:句を持っていると、groupby句に条件を設定することができます

于 2013-01-22T21:57:45.353 に答える
1

次のコードはあなたのために仕事をします:

SELECT Hostname,Site,Rack FROM hardwaredb WHERE Hostname LIKE '%$hostval%'
GROUP BY Hostname, Site, Rack

キーフレーズを試すこともできますがSELECT DISTINCT、これまで使用したことがない場合は予期しない結果が生じる可能性があります...

于 2013-01-22T21:58:59.730 に答える
1

私が理解しているように、DISTINCTを使用した後は、現在の状態を実現できます(3つの列すべてがサンプルデータにあるものと区別されている限り機能します)。

SELECT  DISTINCT Hostname,Site,Rack 
FROM    hardwaredb 
WHERE   Rack LIKE '%Rack1%'

サイトとラックで値が異なる場合は、次を使用できます。

SELECT  DISTINCT Hostname
FROM    hardwaredb 
WHERE   Rack LIKE '%Rack1%'

最後に、値がサイトとラックで変化しているが、使用できるこれらの各列の値が必要な場合(順序は重要です。そうしないと、クエリが非決定的になり、同じデータをクエリすると異なる結果が生じる可能性があります)。

SELECT  HostName, Site, Rack
FROM    hardwaredb 
WHERE   Rack LIKE '%Rack1%'
GROUP BY HostName
ORDER BY Rack, Site;

ただし、私は個人的にこのソリューションが嫌いで、ほとんどのDBMSで機能せず、groupbyの項目に依存しない列を選択リストに含めるというANSI規格に違反しています。代替案を投稿するのは難しいですが、あなたの正確な要件を理解せずに。

于 2013-01-22T22:03:44.890 に答える