There are two tables.
Table A :
id | name |
---|---|
1 | nameX |
2 | nameY |
Table B :
id | aId | name |
---|---|---|
1 | 2 | Foo |
2 | 2 | Bar |
Ask a SQL:
when search ‘nameY’, get
A.id | A.name | B.id | B.aId | B.name |
---|---|---|---|---|
2 | nameY |
when search ‘Bar’, get
A.id | A.name | B.id | B.aId | B.name |
---|---|---|---|---|
2 | nameY | 2 | 2 | Bar |
–
SQL:
select * from A left join B on A.id = B.aId where A.name like '%nameY%' or B.name like '%nameY%';
But get two rows. I don’t need the table B when search ‘nameY’.
A.id | A.name | B.id | B.aId | B.name |
---|---|---|---|---|
2 | nameY | 1 | 2 | Foo |
2 | nameY | 2 | 2 | Bar |
Advertisement
Answer
You should join B
table only when B
table has searched name.
Add “name condition” to LEFT JOIN
of B
table
SELECT A.id, A.name, B.id, B.name FROM A LEFT JOIN B ON B.aid = A.id AND B.name LIKE '%search%' WHERE A.name LIKE '%search%' OR B.name LIKE '%search%'