4
I am trying to execute a database query to collect all rows in table A referenced in a column of table B:
Query I am running
-- Consulta a recolher da tabela A as linhas com ID referenciado na tabela B
SELECT A.*
FROM table_eshop_lines A
WHERE A.id IN (
SELECT REPLACE(B.lines_id, ';', ',') AS ids
FROM table_eshop B
WHERE B.id=1
)
The expected result would be 3 lines, namely line 1, 2 and 3. What happens is that I only get line 1:
┌──────┬───────┬───────┬────────┬────────┬───────┬──────────────┐
│ id │ pid │ ref │ name │ isbn │ qtd │ unit_price │
├──────┼───────┼───────┼────────┼────────┼───────┼──────────────┤
│ 1 │ 254 │ │ John │ │ 1 │ 25.08 │
└──────┴───────┴───────┴────────┴────────┴───────┴──────────────┘
See only table B
If you run the query of the second table, I get the desired values:
-- Consulta a tabela B
SELECT REPLACE(B.lines_id, ';', ',') AS ids
FROM table_eshop B
WHERE B.id=1
You’re gonna give it back to me:
┌──────────┐
│ ids │
├──────────┤
│ 1,2,3 │
└──────────┘
Tables A and B
Below follows the description of each of the tables obtained through Mysql DESCRIBE (English):
DESCRIBE `table_eshop_lines`
┌────────────┬───────────────┬──────┬───────┬─────────┬────────────────┐
│ Field │ Type │ Null │ Key │ Default │ Extra │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ id │ int(11) │ NO │ PRI │ NULL │ auto_increment │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ pid │ int(11) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ ref │ varchar(200) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ name │ varchar(500) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ isbn │ varchar(500) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ qtd │ int(11) │ NO │ │ NULL │ │
├────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ unit_price │ decimal(10,2) │ NO │ │ NULL │ │
└────────────┴───────────────┴──────┴───────┴─────────┴────────────────┘
DESCRIBE `table_eshop`
┌─────────────┬───────────────┬──────┬───────┬─────────┬────────────────┐
│ Field │ Type │ Null │ Key │ Default │ Extra │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ id │ int(11) │ NO │ PRI │ NULL │ auto_increment │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ sid │ text │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ uid │ int(11) │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ lines_id │ text │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ total_goods │ decimal(10,2) │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ end_time │ datetime │ NO │ │ NULL │ │
├─────────────┼───────────────┼──────┼───────┼─────────┼────────────────┤
│ status │ tinyint(1) │ NO │ │ NULL │ │
└─────────────┴───────────────┴──────┴───────┴─────────┴────────────────┘
Question:
What am I doing wrong so that when I run the full query I indicated, instead of receiving the 3 rows of the table table_eshop_lines
, I only get the first line containing the value 1
in the column id
?
It is possible to avoid the Concat by keeping the question replace, and using
find_in_set
, but I doubt if it would be advantageous.– bfavaretto