Improve company productivity with a Business Account.Sign Up

x
?
Solved

Better/Quicker Way to Join on LIKE in SQL Server?

Posted on 2015-02-20
3
Medium Priority
?
99 Views
Last Modified: 2015-03-03
Hello,

I have two sets of data I'm trying to join, but the query is so slow it times out even with very small sections of the data.

The first set of data is an email address and a comma-separated list of categories.

Email_Address	Customer_Categories
bob1@bob.com	592,593
bob2@bob.com	592,593,597
bob3@bob.com	602

Open in new window


The second set of data is a list of SKUs which have one category ID associated with them on each row:

productcode	categoryid
2036814		592
2102602		593
2031181		597
2031212		597
2102602		599
2102602		602
2102602		608
2102602		610
2102602		611

Open in new window


I've tried to create join the two result sets on a LIKE condition

SELECT
	CustomerTable.EmailAddress, 
	ProductTable.ProductCode
FROM 
	(SELECT EmailAddress, Customer_Categories FROM Customers) AS CustomerTable
JOIN 
	(SELECT ProductCode, CategoryID FROM Products) AS ProductTable
ON
	CustomerTable.Customer_Categories LIKE ProductTable.CategoryID

Open in new window


but either there's too much data, the query is too slow, or both. Is there a better or more efficient way to do this sort of query in SQL Server?
0
Comment
Question by:vacpartswarehouse
3 Comments
 
LVL 38

Accepted Solution

by:
ste5an earned 2000 total points
ID: 40622434
Sure is there a quicker solution: normalize your data. That's what gives you the best performance.

You need a split function when you want to do it inline, e.g. like here.
0
 
LVL 50

Expert Comment

by:Dale Fye
ID: 40623025
Have to agree with ste5an.  Your CustomerCategories column is not normalized and the Like argument in your SQL will take forever with large datasets.  Your customer Categories table should look like:

CustomerID    CategoryID
1                            592
1                            593
2                            592
2                            593
2                            597
3                            602

and you should have a Customers table which contains the CustomerID and email address, along with other customer specific fields.
0
 
LVL 54

Expert Comment

by:Vitor Montalvão
ID: 40625308
Can't understand why do you have 2 sub-queries. You can use a single query for that:
SELECT
	Customers.EmailAddress, 
	Products.ProductCode
FROM Customers, Products 
WHERE Customers.Customer_Categories LIKE Products.CategoryID

Open in new window

0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Windocks is an independent port of Docker's open source to Windows.   This article introduces the use of SQL Server in containers, with integrated support of SQL Server database cloning.
When trying to connect from SSMS v17.x to a SQL Server Integration Services 2016 instance or previous version, you get the error “Connecting to the Integration Services service on the computer failed with the following error: 'The specified service …
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
SQL Database Recovery Software repairs the MDF & NDF Files, corrupted due to hardware related issues or software related errors. Provides preview of recovered database objects and allows saving in either MSSQL, CSV, HTML or XLS format. Ensures recov…

606 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question