1

「どの構成にも貢献していない名と姓を持つ人物のリストを表示する」ように要求する SQL タスクがあります。

これが私が試みたものですが、役に立ちませんでした。

select * from (select count(a.person_id)num,a.first_name ||' '|| a.last_name name
  from LABPRJ_PERSON a, LABPRJ_COMPOSITION_DETAIL w
  where a.person_id=w.person_id group by last_name, a.first_name
  union
  select 0,a.first_name ||' '|| a.last_name name from LABPRJ_PERSON a where person_id not in (select person_id
  from LABPRJ_COMPOSITION_DETAIL)) where num = 0; 

どんな助けでも大歓迎です。

4

4 に答える 4

0

を使用することもできますNOT EXISTS。パフォーマンスは よりも優れていますNOT IN

SELECT last_name, first_name FROM LABPRJ_PERSON p
WHERE NOT EXISTS
    (SELECT * FROM LABPRJ_COMPOSITION_DETAIL c ON c.person_id = p.person_id)
于 2013-10-15T03:18:43.220 に答える
0

私が知る限り、これが必要なだけです:

SELECT * FROM LABPRJ_PERSON WHERE person_id NOT IN (SELECT person_id FROM LABPRJ_COMPOSITION_DETAIL);
于 2013-10-15T02:21:57.543 に答える
0

SQL Server を使用している場合は、これを試してください。

SELECT
  CAST(A.FIRST_NAME AS  AS VARCHAR(MAX))  + ' '+  CAST(A.LAST_NAME AS VARCHAR(MAX))
  FROM 
      LABPRJ_PERSON A
  WHERE NOT EXISTS 
  (
    SELECT 
        B.PERSON_ID 
    FROM
        LABPRJ_COMPOSITION_DETAIL B WHERE A.PERSON_ID = B.PERSON_ID
  ) 
于 2013-10-15T05:23:52.610 に答える
0
SELECT last_name, first_name 
FROM LABPRJ_PERSON AS T1
RIGHT OUTER JOIN
LABPRJ_COMPOSITION_DETAIL AS T2
ON T1.person_id=T2.person_id
WHERE T2.person_id IS NULL;
于 2013-10-15T05:35:40.687 に答える