Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL query problem

Tags:

mysql

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.

like image 560
Pankaj Avatar asked May 07 '26 23:05

Pankaj


2 Answers

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
like image 146
Christofel Avatar answered May 09 '26 14:05

Christofel


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
        )
like image 38
Quassnoi Avatar answered May 09 '26 16:05

Quassnoi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!