【问题标题】:SQL- listing people who did not contributeSQL——列出没有贡献的人
【发布时间】:2013-10-22 17:30:46
【问题描述】:

我有一个 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; 

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql sql-server sql-server-2008 tsql


    【解决方案1】:
    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;
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 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
        ) 
      

      【讨论】:

        【解决方案3】:

        你也可以使用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)
        

        【讨论】:

          【解决方案4】:

          据我所知,你应该只需要这个:

          SELECT * FROM LABPRJ_PERSON WHERE person_id NOT IN (SELECT person_id FROM LABPRJ_COMPOSITION_DETAIL);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-22
            相关资源
            最近更新 更多