1. Get rid of all advertisements and get unlimited access to documents by upgrading to Premium Membership. Upgrade to Premium Now and also get a Premium Badge!

SQL Statement - Complex Condition

Discussion in 'SQL PL/SQL' started by Ying, Aug 18, 2009.

  1. Ying

    Ying Active Member

    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    55
    Hi,

    First I wish to say that I have tried my best to think, but I still coudn't think "out of box".

    I want to compute a SQL statement base on the condition below:

    1.) Table A consists of employee data (Emp_Id, Email, Sex, Address, race and nationality)

    We use email as login, so in order to retrieve a correct employee data base on their email, the system won't get the correct row as there are many rows return. So what I did is,


    2.) Create a Table B consists of employees whereby their email address is shared with others employees (Those has no email).

    But I have no idea how to compute a SQL statement base on these two tables to retrive a correct row for that particular employee who's email is shared by other employee.

    Hope my explaination won't be confused.

    Please advise.

    Ying
     
  2. rajavu

    rajavu Forum Guru

    Messages:
    815
    Likes Received:
    52
    Trophy Points:
    610
    Location:
    @ Bangalore , India
    Actually Not clear what you are telling about.

    Do you mean to say Table A conists of persons with actual email ids and table B with persons with shared email ids? If that is the case, You can do something like...

    Code (SQL):
    SELECT * FROM B WHERE EXISTS (SELECT NULL FROM A WHERE A.email_id = B.email_id)
     
  3. zargon

    zargon Community Moderator Forum Guru

    Messages:
    2,347
    Likes Received:
    348
    Trophy Points:
    1,430
    Location:
    Aurora, CO
    You cannot do what you want with the limited criteria you've provided. This system was designed for unique email addresses (each employee has his/her own, distinct email address); since your company has chosen to not enforce this condition you end up with the query results you report:

    Code (SQL):
    SQL> CREATE TABLE employees(
      2          Emp_Id    NUMBER,
      3          Email     varchar2(100),
      4          Sex       varchar2(1),
      5          Address   varchar2(240),
      6          race      varchar2(30),
      7          nationality varchar2(100)
      8  );

    TABLE created.

    SQL>
    SQL> BEGIN
      2          FOR i IN 4437..6611 loop
      3              IF MOD(i,7) = 0 THEN
      4                  INSERT INTO employees
      5                  VALUES(i, 'blorgenfortz@smingnadle.net', 'F', i||' Snangdoodle Ave, Plortz, Wahabi', 'Caucasian','Swedish');
      6              elsif MOD(i,43) = 0 THEN
      7                  INSERT INTO employees
      8                  VALUES(i, 'blargenfurtz@smingnoodle.net', 'M', i||' Snoongdadle Blvd, Plartz, Annur', 'Caucasian','Dutch');
      9              ELSE
     10                  INSERT INTO employees
     11                  VALUES(i, 'apssing'||i||'@trebnu'||i||'.net', 'M', i||' Snoon, Plartz, Annur', 'Caucasian','Norwegian');
     12              END IF;
     13
     14          END loop;
     15
     16          commit;
     17
     18  END;
     19  /

    PL/SQL PROCEDURE successfully completed.

    SQL>
    SQL> SET linesize 500
    SQL>
    SQL> SELECT *
      2  FROM employees
      3  WHERE email = 'blorgenfortz@smingnadle.net';

        EMP_ID EMAIL                                                                                                S ADDRESS                                                                                                                                                                                                                                          RACE                           NATIONALITY
    ---------- ---------------------------------------------------------------------------------------------------- - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------ ----------------------------------------------------------------------------------------------------
          4774 [email]blorgenfortz@smingnadle.net[/email]                                                                          F 4774 Snangdoodle Ave, Plortz, Wahabi                                                                                                                                                                                                             Caucasian                      Swedish
          4781 [email]blorgenfortz@smingnadle.net[/email]                                                                          F 4781 Snangdoodle Ave, Plortz, Wahabi                                                                                                                                                                                                             Caucasian                      Swedish
          4788 [email]blorgenfortz@smingnadle.net[/email]                                                                          F 4788 Snangdoodle Ave, Plortz, Wahabi                                                                                                                                                                                                             Caucasian                      Swedish
          4795 [email]blorgenfortz@smingnadle.net[/email]                                                                          F 4795 Snangdoodle Ave, Plortz, Wahabi                                                                                                                                                                                                             Caucasian                      Swedish

    ...

    311 ROWS selected.

    SQL>
    SQL> SELECT *
      2  FROM employees
      3  WHERE email = 'blargenfurtz@smingnoodle.net';

        EMP_ID EMAIL                                                                                                S ADDRESS                                                                                                                                                                                                                                          RACE                           NATIONALITY
    ---------- ---------------------------------------------------------------------------------------------------- - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------ ----------------------------------------------------------------------------------------------------
          4773 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4773 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          4472 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4472 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          4558 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4558 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          4601 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4601 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          4644 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4644 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          4687 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4687 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          4730 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 4730 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          5375 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 5375 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          5461 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 5461 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch
          5504 [email]blargenfurtz@smingnoodle.net[/email]                                                                         M 5504 Snoongdadle Blvd, Plartz, Annur                                                                                                                                                                                                             Caucasian                      Dutch

    ...

    43 ROWS selected.

    SQL>
    You will need additional criteria to isolate a particular employee:

    Code (SQL):
    SQL> SELECT *
      2  FROM employees
      3  WHERE email = 'blorgenfortz@smingnadle.net'
      4  AND address LIKE '4473%';

        EMP_ID EMAIL                                                                                                S ADDRESS                                                                                                                                                                                                                                          RACE                           NATIONALITY
    ---------- ---------------------------------------------------------------------------------------------------- - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------ ----------------------------------------------------------------------------------------------------
          4473 blorgenfortz@ smingnadle.net                                                                          F 4473 Snangdoodle Ave, Plortz, Wahabi                                                                                                                                                                                                             Caucasian                      Swedish

    SQL>
    Using the email address alone, even with your second table, will not give you the results you desire as you have no unique identifier in your WHERE clause to isolate a particular employee.
     
  4. Ying

    Ying Active Member

    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    55
    The table B consists of the employees whose email address is shared by others. For example:

    Table A:
    Employee A email address, shared by Employee B, C, D
    Employee F email address, shared by Employee H, I
    Employee J email address, shared by Employee K, L, M, N
    Employee O email address, shared by Employee P, Q, R, S, T, U

    Employee 01 email address - Unique
    Employee 02 email address - Unique
    Employee 03 email address - Unique
    Employee 04 email address - Unique
    Employee 05 email address - Unique
    Employee 06 email address - -
    Employee 07 email address - -
    Employee 08 email address - -
    Employee 09 email address - -
    Employee 10 email address - -
    Employee 11 email address - -
    Employee 12 email address
    - -

    Table B:

    Employee A email address, Emp ID
    Employee F email address, Emp ID
    Employee O email address,Emp ID


    So, what I want to perform for my SQL is
    IF the emloyee's emailaddress COUNT(*) > 1), then Validate whether his/her is in Table B, IF TRUE, then this is the "Original" employee. So, select the data.

    There will be two main tables involve in the SQL statements, table B and A

    Ying
     
  5. Sadik

    Sadik Community Moderator Forum Guru

    Messages:
    1,906
    Likes Received:
    252
    Trophy Points:
    1,455
    Ying, could you show us what query you have written?