Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
jimtimber
Yak Posting Veteran
60 Posts |
Posted - 2014-07-26 : 04:20:02
|
Hi,I've been asked to produce a query where the user wants can type in a family member name and they can find the details of that person. We have a family table, an other family table and a other-significant adults table. How do I name a searchable list of names into 1 field bringing in all family members? They are all linked to a unique familyID number. The user wants to be able to type in a name and it brings up the family they are attached to. I know how to set up the filets but not sure how to search in multiple fields at once.Thanks,JimJim |
|
MichaelJSQL
Constraint Violating Yak Guru
252 Posts |
Posted - 2014-07-26 : 12:19:26
|
I am not sure exactly what you are facing based on the way you worded your questions. It is always helpful when you ask if you include some basic tables structures and a few rows of data. I think you might be looking for something like the following: 2 family tables and 1 significant adult tables and you want to search 1 parameter against 2 different family tables and bring back the family as well as adults or using a list to search.CREATE TABLE #Family1(FamilyID Int IDENTITY(1,2),FamilyName varchar(25))CREATE TABLE #Family2(FamilyID Int IDENTITY(2,2),FamilyName varchar(25))CREATE TABLE #SignificantAdults(SugAdultID Int IDENTITY(1,1),FamilyID Int ,AdultName varchar(50))INSERT INTO #Family1VALUES('Smith'),('Jones'),('Thompson') INSERT INTO #Family2VALUES('Ray'),('Lee'),('McDougal') INSERT INTO #SignificantAdultsValues(1 ,'Jane Smith'),(1 ,'Gerry Smith'),(1 ,'Kim Smith'),(3 ,'Frank Jones'),(3 ,'Tom Jones'),(5 ,'Scott Thompson'),(2 ,'Tina Ray'),(2 ,'Stevie Ray'),(4 ,'Bruce Lee'),(4 ,'Tim Lee'),(6 ,'John McDougal'),(6 ,'Jane McDougal')-- Script DECLARE @Name varchar(50) = 'Ray';With JoinFamilyTablesAS( SELECT * FROM #Family1 UNION ALL SELECT * FROM #Family2)-- if the 2 family tables are the same, you can merge them together in the CTE and have 1 columns to search onSELECT J1.FamilyName,J2.SugAdultID,J2.FamilyID,J2.AdultName FROM JoinFamilyTables J1 INNER JOIN #SignificantAdults J2 ON J1.FamilyID = J2.FamilyID WHERE J1.FamilyName = @Name -- if the family tables are different structures, you could do something like this SELECT ISNULL(j2.FamilyName,j3.FamilyName) FamilyName,J1.* FROM #SignificantAdults J1 LEFT JOIN #Family1 J2 ON J2.FamilyID = J1.FamilyID LEFT JOIN #Family2 J3 ON J3.FamilyID = J1.FamilyID WHERE J2.FamilyName = @Name OR J3.FamilyName = @Name --if you need to search a list -- you could also just create a proc and pass in a table variable rather than parse/unpack a string : xml is also an optionDECLARE @List varchar(100) = 'RAY,LEE,SMITH,'DECLARE @FamilyList TABLE(FamilyName Varchar(50)) -- declare a table valueWHILE CHARINDEX(',',@List,1) >0 --- there are many many ways to unpack\parse a string - this is fairly quick and simple for concept purposesBEGIN INSERT INTO @FamilyList SELECT SUBSTRING(@List, 1,CHARINDEX(',',@List ,1) -1) SELECT @List = REPLACE(@list,SUBSTRING(@List,1,CHARINDEX(',',@List,1)),'')END;With JoinFamilyTablesAS( SELECT * FROM #Family1 UNION ALL SELECT * FROM #Family2)SELECT J1.FamilyName,J2.SugAdultID,J2.FamilyID,J2.AdultName FROM JoinFamilyTables J1 INNER JOIN #SignificantAdults J2 ON J1.FamilyID = J2.FamilyID INNER JOIN @FamilyList J3 ON J3.FamilyName = J1.FamilyName |
|
|
jimtimber
Yak Posting Veteran
60 Posts |
Posted - 2014-07-27 : 11:02:14
|
Hi Michael,I'll have a go with some of these tomorrow when back in the office. Basically, we have 4 tables with different family memebers names. We get criminal record background checks sent back to us and we find it hard to find exactly who the check is for. I was asked to produce a query where they can type who the record check was for and it'll say what the familyIDs available for that name are, to help narrow down the search. If I can't get your work above to work i'll post back the tables I am using.Thank you,JamieJim |
|
|
|
|
|
|
|