2

SQLクエリは私の得意分野ではないため、頭を悩ませることはできません。別のテーブルidの列に表示されるemployeesテーブルの行の名前を選択しようとしています。つまり、accountsテーブルに表示されるすべての従業員名。salesPersonIdaccounts

ACCOUNT
+----+---------------+
| id | salesPersonID |
+----+---------------+
|  0 |     1020      |
+----+---------------+
|  1 |     1020      |
+----+---------------+
|  2 |     1009      |
+----+---------------+


EMPLOYEE
+------+---------------+
|  id  |   firstName   |
+------+---------------+
| 1009 |     BILL      | <-select his name
+------+---------------+
| 1020 |     KATE      | <-select her name
+------+---------------+
| 1025 |     NEIL      | <-not this guy
+------+---------------+

Neilはaccount.salesPersonIDに存在しないので、彼以外の他の2つを選択したいと思います。しかし、私はそれについてあまり進んでおらず、いくつかの入力を探しています。

SELECT * FROM employee e
LEFT JOIN account a
ON a.salesPersonID = e.id
WHERE (SELECT COUNT(salesPersonID) FROM account) > 0

動作しません。に存在するこれらの従業員名をどのように選択できるのでしょうかsalesPersonID。ありがとうございました。

4

2 に答える 2

4

これを試して:

SELECT Distinct e.firstName 
FROM employee e
JOIN account a ON a.salesPersonID = e.id

JOINフィルタリングを処理して、両方のテーブルに存在するレコードのみを返すようにします。

DistinctfirstName各値を1回だけ取得していることを確認します。employee.Idまたはでグループ化することでもこれを実現できますemployee.firstName(名前が同じであっても、一意の従業員ごとに1行を返す場合は、IDでグループ化する方が適切な戦略です。グループ化firstNameまたは使用するdistinctのは、次のいずれかが必要な場合です。名前が複数の従業員によって使用されている場合でも、それぞれの一意の名前)

于 2013-02-26T20:28:21.023 に答える
0

あなたはこのようなクエリを持つことができます...

従業員からe.firstnameを選択します1eleft join account a on(e.id = a.salespersonid)where e.id = a.salespersonid group by e.firstname

結果:

ファーストネームビルケイト

于 2013-02-27T10:10:16.237 に答える