3

SELECT1秒を使用してIDを取得し、そのIDを1秒で使用しようとしていますが、SELECT方法がわかりません。

SELECT Employee.Name 
FROM Emplyee, Employment 
WHERE x = Employment.DistributionID 
(SELECT Distribution.DistributionID FROM Distribution 
       WHERE Distribution.Location = 'California') AS x

この投稿は長くなりましたが、ここに短い「ヒント」があります

私のselectの構文は悪いですが、ロジックはそうではありません。どういうわけかその「x」が必要です。したがって、2番目selectが最も重要です。次に、最初の内でその「x」を使用する必要がありますselect。方法がわからない

/ヒント

これは私が想像できる唯一のことです。私はSQLを初めて使用します。練習する前に本が必要だと思いますが、始めたので、小さなプログラムを終了したいと思います。

編集:

参加を調べましたが、まだ取得できません

SELECT Employee.Name 
    FROM Emplyee, Employment 
    WHERE x = Employment.DistributionID 
    LEFT JOIN Distribution ON
    (SELECT Distribution.DistributionID FROM Distribution 
           WHERE Distribution.Location = 'California') AS x

ASおよびでエラーメッセージを取得しますLeft

名前を使用して上部の赤からIDを検索し、下の表の上部の赤から検索したIDを使用します。次に、見つけたIDをGreenと照合します。グリーンIDを使用して対応する名前を検索します

ここに画像の説明を入力してください

私はCaliforniaC#からの出力データとして持っています。CaliforniaDistributionIDを見つけるために使用したいと思います。DistributionIDを使用してEmployeeIDを検索します。EmployeeIDを使用して名前を検索します

私の論理:

Parameter: Distribution.Name (from C#)

Find DistributionID that has Distribution.Name
Look in Employment WHERE given DistributionID 
      reveals Employees that I am looking for (BY ID)
Use that ID to find Name
      return Name

テーブル:

注:この例の画像では、選択のために従業員が繰り返しますが、実際には単数です

「Locatie」(中央の表)はLocationで、C#から(再び)場所を取得しますCalifornia。例として使用します。私は何よりもIDまず見つける必要があります!

ここに画像の説明を入力してください

申し訳ありませんが、英語ではありませんが、作成テーブルは次のとおりです。

ここに画像の説明を入力してください

4

3 に答える 3

2

このソリューションを試してください:

DECLARE @pLocatie VARCHAR(40)='Alba'; -- p=parameter

SELECT a.AngajatID, a.Nume
FROM Angajati a
JOIN Angajari j ON a.AngajatID=j.AngajatID
JOIN Distribuire d ON j.DistribuireID=d.DistribuireID
WHERE d.Locatie=@pLocatie

したがって、Angajariテーブル(Employment)に一意のキーを追加する必要があります。

ALTER TABLE Angajari
ADD CONSTRAINT IUN_Angajari_AngajatID_DistribuireID UNIQUE (AngajatUD, DistribuireID);

これにより、重複を防ぐことができ(AngajatID, DistribuireID)ます。

于 2013-02-07T23:18:44.933 に答える
2

これを試して:

SELECT angajati.Nume 
FROM angajati 
JOIN angajari  ON angajati.AngajatID = angajari.AngajatID
JOIN distribuire ON angajari.distribuireid = distribuire.distribuireid
WHERE distribuire.locatie = 'california'

従業員を配布場所にマッピングするテーブルがあるので、マッピングを作成するには、そのテーブルを途中で結合する必要があります。WHERE句が必要な場合は変数を使用して、これをストアドプロシージャとして、またはC#コードの出力から必要なものとして呼び出すことができます。

于 2013-02-08T14:21:11.597 に答える
0

Emplyee(sic?)とEmploymentをどのように接続しているかわかりませんが、結合を使用して2つのテーブルを接続し、結合でテーブルの関係を指定します。結合は通常、エイリアスがある場合に最もよく見えるため、テーブル名全体を繰り返す必要はありません。次のクエリは、配布場所がカリフォルニアに等しい雇用テーブルと配布テーブルの両方からすべての情報を取得します。従業員を雇用に参加させて名前を取得することもできます。

SELECT *
FROM Employment e
JOIN Distribution d on d.DistributionID = e.DistributionID
WHERE d.Location = 'California'

これにより、両方のテーブルの内容が返されます。特定のレコードを選択するには、selectステートメントでエイリアス。[Col_Name]をコンマで区切って使用します。たとえば、d.DistributionIDを使用して、配布テーブルからDistributionIDを返します。

于 2013-02-07T21:26:03.493 に答える