I have only single table as shown below
id | name | product |
---|---|---|
1 | sai | m |
2 | sai | EBB |
3 | sri | m |
4 | ram | m |
5 | sita | EBB |
6 | siva | EBB |
please help me to write a SQL query to show only m , only ebb and both . only m
id | name | product |
---|---|---|
3 | sri | m |
4 | ram | m |
only ebb
id | name | product |
---|---|---|
5 | sita | EBB |
6 | siva | EBB |
intersect or both
id | name | product |
---|---|---|
1 | sai | m |
2 | sai | EBB |
i have tried using not except, joins but nothing worked for me.Please help me .
CodePudding user response:
Use subquery as follows
mysql> select * from tbl where name in (select name from tbl where product = 'm') and name not in (select name from tbl where product = 'EBB');
---- ------ ---------
| id | name | product |
---- ------ ---------
| 3 | sri | m |
| 4 | ram | m |
---- ------ ---------
2 rows in set (0.01 sec)
mysql> select * from tbl where name not in (select name from tbl where product = 'm') and name in (select name from tbl where product = 'EBB');
---- ------ ---------
| id | name | product |
---- ------ ---------
| 5 | sita | EBB |
| 6 | siva | EBB |
---- ------ ---------
2 rows in set (0.01 sec)
mysql> select * from tbl where name in (select name from tbl where product = 'm') and name in (select name from tbl where product = 'EBB');
---- ------ ---------
| id | name | product |
---- ------ ---------
| 1 | sai | m |
| 2 | sai | EBB |
---- ------ ---------
2 rows in set (0.00 sec)