0

I have the following query that checks if two columns of a table are in another The query works, I hope you can optimize the call in because they are equal. I doubt if there is a performance penalty because two calls are made to the same query

SELECT name,lastname FROM TABLA_A
WHERE 
name IN (
  SELECT name FROM TABLE_B
)
OR
lastname IN (
  SELECT lastname FROM TABLE_B
)

ANOTHER WAY

SELECT a.name,a.lastname
FROM TABLE_A as a
join TABLE_B  as b on a.name=b.name
or a.lastname= b.lastname

try to join, is a valid option? there are other ways to make this task more efficient? thank you very much

DarkFenix
  • 706
  • 1
  • 13
  • 34

3 Answers3

1

There is a performance issue in using OR that you can use UNION instead like this:

SELECT name, lastname 
FROM TABLE_A
WHERE name IN (
  SELECT name 
  FROM TABLE_B)
UNION -- If there is not any duplicate use `UNION ALL` instead
SELECT name, lastname 
FROM TABLE_A
WHERE lastname IN (
  SELECT lastname 
  FROM TABLE_B);

[SQL Fiddle Demo]

shA.t
  • 16,580
  • 5
  • 54
  • 111
1

You can use EXISTS which works more efficiently than IN from every aspects:

SELECT a.name,
    a.lastname
FROM TABLE_A as a
WHERE EXISTS (SELECT b.name 
             FROM TABLE_B b WHERE a.name = b.name OR a.lastname= b.lastname)
Shushil Bohara
  • 5,556
  • 2
  • 15
  • 32
  • [There is no difference between using `EXISTS` vs `IN` as a performance issue](http://stackoverflow.com/a/3964770/4519059) ;). – shA.t Sep 29 '16 at 05:35
0

As you have already done

SELECT a.name, a.lastname
FROM TABLE_A as a
INNER JOIN TABLE_B as b on a.name=b.name OR a.lastname= b.lastname
Esty
  • 1,882
  • 3
  • 17
  • 36