Pankaj
Pankaj

Reputation: 4505

SQL query problem

I have 2 tables Project and ProjectList like this

Project

ProjectID
Name
ProjectListID - allow null

In ProjectList

ProjectListID
ProjName

Now what i need here, i want only those recoed from ProjectList table which ProjectListID not in Project table. I made a query but it is taking lot of time to execute.

select * FROM projectslist pl where pl.ProjectsListID not in (SELECT p.ProjectsListID FROM project p where (p.ProjectsListID is not null and p.ProjectsListID <>0))

Please help me to create optimize query. I am using My SQL.

Upvotes: 3

Views: 108

Answers (3)

ovais.tariq
ovais.tariq

Reputation: 2625

select project_list.*
from project_list left join project using (project_list_id)
where isnull(project.project_id)

This query is much faster than the solutions provided by others using subquery.

Upvotes: 0

Christofel
Christofel

Reputation: 31

ProjectList.ProjectListID is not allow null right?

then you should try to compare by using LEFT JOINS:

SELECT * FROM ProjectList pl LEFT JOIN Project p ON pl.ProjectListID = p.ProjectListID
WHERE pl.ProjectListID is null

Upvotes: 2

Quassnoi
Quassnoi

Reputation: 425261

NOT NULL condition in your query is redundant: <> 0 implies it:

SELECT  *
FROM    projectslist pl
WHERE   pl.ProjectsListID NOT IN 
        (
        SELECT  p.ProjectsListID
        FROM    project p
        WHERE   p.ProjectsListID <> 0
        )

For this to work fast, you need to create an index on project (ProjectsListID).

Could you please run

EXPLAIN
SELECT  *
FROM    projectslist pl
WHERE   pl.ProjectsListID NOT IN 
        (
        SELECT  p.ProjectsListID
        FROM    project p
        WHERE   p.ProjectsListID <> 0
        )

and post its output here?

Update:

Since the column in question is nullable, it is better to rewrite the query as NOT EXISTS:

SELECT  *
FROM    projectslist pl
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    project p
        WHERE   p.ProjectsListID = pl.ProjectsListID
                AND p.ProjectsListID <> 0
        )

Upvotes: 1

Related Questions