I am trying to implement a sql query to below scenario,
user_id | nic_number | reg_number | full_name | code |
---|---|---|---|---|
B123 | 12345 | 1212 | John | 123 |
B124 | 12346 | 1213 | Peter | 124 |
B125 | 12347 | 1214 | Darln | 125 |
B123 | 12345 | 1212 | John | 126 |
B123 | 12345 | 1212 | John | 127 |
In the subscribers table there can be rows with same user_id
, nic_number
, reg_number
, full_name
. But the code is different.
First -> get the user who have same code
i have typed in the query ( i have implemented a query for that and it is working fine)
Second -> Then in that data i need to find the related rows (check by nic_number
, and reg_number
) and display only those related rows. That means in the below query I have got the data for code
= 123
. Which will show the first row of the table.
But I need to display only the rest of the rows which have the same nic_number
or reg_number
for the searched code
only once.
That means the last 2 rows of the table.
select code,
GROUP_CONCAT(distinct trim(nic_number)) as nic_number,
GROUP_CONCAT(distinct trim(reg_number)) as reg_number,
GROUP_CONCAT(distinct trim(full_name)) as full_name from subscribers
where code like lower(concat('123')) group by code;
I need to implement sql query for this scenario by changing the above query.(Only one query, without joins or triggers). I have tried this for a long time and unable to get the result. If anyone of you help me to get the result it will be very helpful.
You can combine nic and reg numbers in a unique key to get your records.
EDITED to extract only related rows and not the one searched by code, by the way, code seems not to be unique in subscribers table.
select
code,
trim(nic_number) as nic_number,
trim(reg_number) as reg_number,
trim(full_name) as full_name,
trim(code) as code
from
subscribers s1
where
code <> lower(trim('123'))
and trim(nic_number) + '|' + trim(reg_number) IN (
select trim(nic_number) + '|' + trim(reg_number)
from subscribers
where code = lower(trim('123'))
)