0

私はSQLにかなり慣れていません...次の列を持つテーブルがあります:

Employee,Title,Age,Children

基本的な SELECT の出力は次のようになります。

Steve |Foreman|40|Billy
Steve |Foreman|40|Amy
Steve |Foreman|40|Michelle
Daniel|Smith  |35|Eric
Daniel|Smith  |35|Jake
Erin  |Otis   |29|Eileen

願わくば、各レコードに複数の子を含めることができることを示しました。私ができるようにしたいのは、従業員に名前が「E」で始まる子供がいない場合にのみ値を返すことです。現在、私はまだ従業員を返していますが、「E」で始まる子を持たないレコードのみをリストしています。「E」で始まる子を省略するだけでなく、「E」で始まる子がいる場合は、従業員を完全に省略したいと思います。

これは可能ですか?

ありがとう。

編集 :

したがって、実際には、EMPLOYEES 用と CHILDREN 用の 2 つのテーブルがあります。したがって、現在のクエリは次のようになります。

SELECT E.EMPLOYEE_NAME, E.EMPLOYEE_TITLE, E.EMPLOYEE_AGE, C.CHILDREN_NAME
  FROM EMPLOYEE E INNER JOIN CHILDREN C ON E.EMPLOYEE_ID = C.EMPLOYEE_ID
 WHERE C.CHILDREN_NAME NOT LIKE 'E%'

これにより、E で始まる名前を持つすべての子を除いたすべての行が返されます。目的の効果は、Trinimon が提供したソリューション 2 です。子供の名前が E で始まる場合、従業員を返さないでください。

それがもう少し説明され、誰かが望ましい結果を生み出す方法を説明できることを願っています。前述のように、Trinimon のソリューションは適切な結果を返しますが、テーブルが 2 つあるため、ソリューションをスキーマに合わせて調整する方法がわかりません。

ありがとう。

4

3 に答える 3

1

どちらかのために行く...

SELECT * 
  FROM employees
 WHERE Children NOT LIKE 'E%';

子供の名前が or で始まらないすべてのレコードEが必要な場合は ...

SELECT * 
  FROM employees e1
 WHERE NOT EXISTS (SELECT 1 
                     FROM employees e2
                    WHERE e1.Employee = e2.Employee
                      AND Children LIKE 'E%');

返された従業員に で始まる子がいない場合E

バージョン 1バージョン 2を確認してください。

あなたの構造に基づくps

SELECT E.EMPLOYEE_NAME, 
       E.EMPLOYEE_TITLE,
       E.EMPLOYEE_AGE, 
       C.CHILDREN_NAME
  FROM EMPLOYEE E INNER JOIN CHILDREN C ON E.EMPLOYEE_ID = C.EMPLOYEE_ID
 WHERE NOT EXISTS (SELECT 1 
                     FROM CHILDREN C2
                    WHERE E.EMPLOYEE_ID = C2.EMPLOYEE_ID
                      AND C2.CHILDREN_NAME LIKE 'E%');

この Fiddleを確認してください。

于 2013-09-26T19:29:12.413 に答える
1

あなたは試すことができます:

select * from YourTable T
where NOT EXISTS (select 1 from YourTable where Employee=T.Employee and Children like 'E%')

もちろん、同じ名前の従業員が 2 人いる場合、これには問題があります。句を拡張しWHEREて、従業員を同じにするすべての属性をカバーできます。

select * from YourTable T
where NOT EXISTS (select 1 from YourTable where Employee=T.Employee and Title=T.Title and Age=T.Age and Children like 'E%')

ただし、Children別のテーブルを作成することを検討する必要があります。テーブルに単一のEmployee(一意の を持つ) があり、 への参照を持つ各子が含まれています。EmployeeIDChildrenEmployeeID

于 2013-09-26T19:15:27.500 に答える
0

これは、SQLフィドルのmysqlソリューションです。次に、データを正規化し、子テーブルを作成します。

http://sqlfiddle.com/#!2/f52cc/8/0

于 2013-09-26T19:42:46.947 に答える